後で考えるために。
SQLで結合してグループ化して、その後で「合計」を出す方法は2通り?
SQLの道場にて。(やってない人には何のこっちゃだし、有料プラン範囲内だとしたらちと掲載いけないのではという気がする……ご指摘いただいたら記事を引っ込めます。)
これと、
SELECT items.name, items.price, SUM(items.price) AS "売上額" FROM sales_records JOIN items ON sales_records.item_id = items.id GROUP BY items.id HAVING SUM(items.price) > ( SELECT COUNT(*) * items.price FROM sales_records JOIN items ON sales_records.item_id = items.id WHERE items.name = "グレーパーカー" );
これで、
SELECT items.name, items.price, COUNT(*) * items.price AS "売上額" FROM sales_records JOIN items ON sales_records.item_id = items.id GROUP BY items.id HAVING (COUNT(*) * items.price) > ( SELECT COUNT(*) * items.price FROM sales_records JOIN items ON sales_records.item_id = items.id WHERE items.name = "グレーパーカー" );
違いがないらしい。
3表を全部JOINしてから、select *で全部表示させたら、3表のカラム(行)が、FROMからJOINさせた順に並んでた。sales_recordsの列(複数)、itemsの列(複数)、usersの列(複数)というように。
SELECT users.name, COUNT(users.name), COUNT(sales_records.purchased_at) FROM sales_records JOIN items ON sales_records.item_id = items.id JOIN users ON sales_records.user_id = users.id GROUP BY users.id Having (COUNT(users.name) >= 2) ORDER BY users.name ;
とやってみたら、
COUNT(users.name)=COUNT(sales_records.purchased.at)
になったので、どうやら全部一つの表になってるらしい。sales_recordsを穴埋めするように、他の2表の中の列が何度も繰り返し書き込まれてるような感じ。「users.idとsales_records.user_id」や「sales_records.item_idとitems.id」が突き合わせられて。
コメント