okinawa

IT勉強メモ

Group By句にないカラムを表示させたい

自己結合

・元テーブル

Table1

例:店舗ごとの金額合計を出しつつ、他のカラムも表示する。

select * from Table1 t1
left join (
  select tenpo_cd, sum(value) AS 'tenpo_total' from Table1
  group by tenpo_cd
  ) AS t2
  on t1.tenpo_cd = t2.tenpo_cd

・表示結果

店鋪合計

やり方

  • 集約関数を書いたものをサブクエリにする
  • 同じテーブルで囲って結合する

これだけ。
他にもWindow関数などもある

参考記事

【ウィンドウ関数】Group By で指定していないカラムも出したい時は【分析関数】 - Qiita

番外編(集約関数の中にCASE式)

集約関数の中には、Group By句にないカラムもあるカラムもどっちも書ける。
SUM(カラム名)みたいに。

さらに集約関数の中にcase式を書けるのでけっこう自由に色々できる。
HAVING句では難しいときにおすすめ。

下記はSUM関数の中で商品名を指定している。

select 
tenpo_cd
,sum(case when syohin = 'pork'
         then value
         else 0
         end) AS 'pork'
,sum(case when syohin = 'lemon'
         then value
         else 0
         end) AS 'lemon'
,sum(case when syohin = 'beef'
         then value
         else 0
         end) AS 'beef'
from Table1
group by tenpo_cd

実行結果