小金井にあるWEB制作会社の備忘録

MEMORANDUM

MySQLの「GROUP BY」を二重に使用して集計する

自社運営サイトの集計時に、「同一人物からの同一スクールへのお問い合わせは、別講座の問い合わせであっても1人と数える」というルールがあり、純粋な問い合わせ人数を集計するのにはデータのグループ化を二重にする必要があったため対応方法をメモ

ID
id
受付日
sendtime
スクール名
school
コース名
course
名前
name
12023/12/31 14:36スクールA講座01人物A
22023/12/28 21:53スクールB講座02人物B
32023/12/28 11:25スクールC講座03人物C
42023/12/28 00:41スクールC講座04人物D
52023/12/28 00:36スクールD講座05人物E
62023/12/28 00:36スクールD講座06人物E
72023/12/23 17:17スクールD講座07人物F
82023/12/23 17:17スクールE講座08人物F
92023/12/23 17:17スクールE講座09人物F
102023/12/23 17:17スクールE講座10人物F
112023/12/23 17:17スクールE講座11人物F
122023/12/23 17:17スクールE講座12人物G
132023/12/19 20:59スクールC講座13人物G

PHP

SELECT sendtime, name, COUNT(id) FROM ( SELECT * FROM ○○○○ GROUP BY school ) GROUP BY name

同一人物からの同一スクールへの受付は1件とカウントするため、まずは対象のテーブル○○○○をスクール名「school」でグループ化し、同一スクールへの受付をまとる。
更に上記の内容を氏名「name」でグループ化し、受付数を集計する。

集計結果

受付日
sendtime
名前
name
件数
count(id)
2023/12/31 14:36人物A1
2023/12/28 21:53人物B1
2023/12/28 11:25人物C1
2023/12/28 00:41人物D1
2023/12/28 00:36人物E1
2023/12/23 17:17人物F2
2023/12/19 20:59人物G2

同一カテゴリーの記事