以下にテーブルのリストを示します。
場所 [23,24,25,26,27] の商品のクリック数の合計に基づいて、ショップ ID を降順に並べ替えます。
与えられた product_id = 8
link_shops_locations
shop_id | location_id
---------------------
1 | 23
2 | 24
3 | 25
3 | 26
3 | 27
products_clicks
shop_id | product_id | clicks
-----------------------------
1 | 8 | 1
2 | 7 | 3
2 | 8 | 87
3 | 8 | 21
3 | 8 | 9
link_products_shops
product_id | shop_id
---------------------
7 | 1
8 | 1
8 | 1
8 | 2
8 | 2
8 | 1
7 | 3
8 | 3
これは私が試したものです、
SELECT SUM(c.clicks) as no,
s.shop_id
FROM link_products_shops l
INNER JOIN products_clicks c
ON c.product_id = l.product_id
INNER JOIN link_shops_locations s
ON s.shop_id = c.shop_id // duplicate shop_ids gives wrong SUM
WHERE s.location_id IN (23,24,25,26,27)
GROUP BY s.shop_id
ORDER BY no DESC;
私の問題は、link_shops_locations テーブルに 3 つの shop_id があるため、結果として期待される SUM が 3 倍になることです。これを解決するにはどうすればよいですか? これには link_shops_locations の INNER JOIN 条件が関係しているのでしょうか。少しの助けが非常に役立ちます。