Kobarin's Development Blog

C#やASP.NET、公開APIなどについての記録です。

SQLで最頻値を求める

「私の服」テーブルの中で、最も多い色を求める。
select 色, count(*) as 枚数
 from 私の服
 group by 色
 having count(*) >=
  (select max(CNT)
    from
     (select count(*) AS CNT
       from 私の服
       group by 色
     ) as C
  )
枚数
23


「”私の服”の中で一番多い色は”赤”で、計23枚でした」

追記。簡略化版。
select 色
 from 私の服
 group by 色
 having count(*) >=
  all(select count(*) AS CNT
       from 私の服
       group by 色
     ) as C
グループ化した最頻値
select 季節, 色 
 from 私の服
 group by 季節, 色
 having count(*) >=
  all(select count(*)
       from 私の服 B
       where A.季節 = B.季節
       group by 色
     ) as C
 order by 季節, 色
季節 枚数
7
10
6
4


「”私の服”の中で、春物で一番多い色は赤で7枚、夏物は青で10枚、秋物は黒で6枚、冬物は緑で4枚でした」