0

私は2つのテーブルを持っています:

salon_ranks:

+-----------+-----------+-----------+-----------+
| salon_id  |category_id|  user_id  |    rank   |
+-----------+-----------+-----------+-----------+
|        10 |         1 |       999 |       1   |
|        10 |         2 |       999 |       1   |
|        10 |         1 |       888 |       5   |
|        10 |         2 |       888 |       5   |
+-----------+-----------+-----------+-----------+

categories:

+------+-----------+
|  id  |    name   |
+------+-----------+
|   1  |   prices  |
|   2  |   service |
+------+-----------+

次のようなものを効率的に取得しようとしています。

+-----------+-----------+-----------+
| salon_id  |category_id| AVG(rank) |
+-----------+-----------+-----------+
|        10 |         1 |       3   |
|        10 |         2 |       3   |
+-----------+-----------+-----------+

私にとって最も理にかなっているのは、次のようなクエリです。

SELECT salon_id, category_id, AVG(rank)
FROM salon_ranks
INNER JOIN categories ON category_id = id
GROUP BY salon_id, category_id

しかし、何らかの理由で平均を取得できませんが、代わりにこれを取得します。

+-----------+-----------+-----------+
| salon_id  |category_id| AVG(rank) |
+-----------+-----------+-----------+
|        10 |         1 |       1   |
|        10 |         2 |       5   |
+-----------+-----------+-----------+

なぜそれが起こるのでしょうか?そして、正しいクエリは何でしょうか?


すみません、私のミスでした。元のテーブルのデータが間違っていました。誤解を招いて本当にごめんなさい:(

4

2 に答える 2

3

あなたの解決策:

http://www.sqlfiddle.com/#!2/ee5c6/2

SELECT SR.salon_id, SR.category_id, AVG(SR.rank)
FROM salon_ranks SR
INNER JOIN categories C ON SR.category_id = C.id
GROUP BY SR.salon_id, SR.category_id
于 2013-07-26T20:19:37.547 に答える
2

これで、クエリが正常に機能することがわかりました。ただし、テーブルのエイリアスを使用することをお勧めします。あなたのケースでは必要ありませんが、クエリをより読みやすく、スケーラブルにします。

SELECT SR.salon_id, SR.category_id, AVG(SR.rank)
FROM salon_ranks SR
INNER JOIN categories C ON SR.category_id = C.id
GROUP BY SR.salon_id, SR.category_id
于 2013-07-26T20:15:57.017 に答える