SQLで結合した後の計算方法で迷うところ(Progateメモ)

データベース プログラミング

後で考えるために。

スポンサーリンク

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」が突き合わせられて。

プログラミングバックエンドSQL
スポンサーリンク
シェアしてみる
竹原万葉をフォローしてみる

ご訪問、ありがとうございます☆

バナーのクリックもぜひ!

にほんブログ村 小遣いブログ 主婦のお小遣い稼ぎへ にほんブログ村 外国語ブログ 多言語学習者(学習中)へ

妻・母・ライター。ライター歴は3年目:美容・ファッション・ヘアスタイル、旅行、IoT、財テクの記事を執筆。CMS可/心理学修士。英文記事&論文歓迎/旧TOEIC900ほど。TED程度なら字幕なしでOK。露仏中国語基礎/HTML, CSS, GAS, VBA, JavaScript, Photoshop/美容薬学検定1級

竹原万葉をフォローしてみる
書く道具

コメント

タイトルとURLをコピーしました