タスク:最も購入した製品をショップごとに表示します。
3テーブル:ショップ、商品、お支払い。 1店舗に販売されている商品に同数の商品がある場合は、どちらの商品を選ぶかは関係ありません。問題別のMySQLグループ:sql_mode = only_full_group_byとの互換性がありません
私はこのクエリにgroup by句に問題がある:MySQLの5.6では
SELECT shop_id, product_id,
(
SELECT COUNT(*)
FROM payment
WHERE product.product_id = payment.product_id
) sold
FROM product
GROUP BY shop_id
HAVING MAX(sold)
またはこのクエリが働くだろう下げます。 これが正しい結果になります。
shop_id | product_id | sold
1 1 3
2 3 1
3 5 1
しかし、選択中のproduct_idが非集計データが含まれているため、5.7に、私は、= ONLY_FULL_GROUP_BY sql_modeのと互換性を取得しています。
完全なエラーメッセージ:
Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'product.product_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
だから私はそうなどによりグループ内のproduct_idを追加することだろうと思ったソリューション:
SELECT shop_id, product_id,
(
SELECT COUNT(*)
FROM payment
WHERE product.product_id = payment.product_id
) sold
FROM product
GROUP BY shop_id, product_id
HAVING MAX(sold)
エラーを修正するが、それは間違った結果を返し、それはもはや店の列を独特なものにすることはない。私はこれを取得しています:
shop_id | product_id | sold
1 1 3
1 2 4
2 3 1
2 4 1
3 5 1
SQLfiddleは、MySQL 5.6を使用していますが、みんなの生活を楽にしますhttp://sqlfiddle.com/#!9/ca12bf9/6
ここで支払いテーブルを使用しているのはなぜですか – e4c5
@ e4c5 1支払いには1商品があり、1商品には0..N支払いがあります。支払いテーブルの各行は販売されている商品を表しています。そのため、特定の商品が何回販売されたかを知るために、その上にCOUNTを出しています。 – Amodar
rawデータからshop_id 2の製品3と4をそれぞれ1つ販売しているため、元の結果が正しいかどうかわかりません。どのようにしてネクタイを処理しますか?それは考慮すべきものです。 – CGritton