mySQLでgroup byした上でcount()したい
2016/04/12
まどろっこしいコトはいいんだ。
重要なことは「DISTINCT」を使って「group by」は使わないってコトだ。
具体例
言葉でアレコレ説明するのが面倒なので、具体的にメモっていく。
使うテーブル
name | taste |
---|---|
鳥精 | タレ |
鳥精 | 塩 |
鳥精 | 味噌 |
豚精 | タレ |
豚精 | 塩 |
豚精 | 味噌 |
ひな皮 | タレ |
ひな皮 | 塩 |
丸ごとシマウマ | タレ |
丸ごとシマウマ | 塩 |
欲しい結果
「name」が何種類あるか知りたい。
要は「4」が返ってきてくれたらOK。
間違ったクエリと結果
掲題通りのクエリと求めていなかった結果。
select count(name) from xxx group by name;
count(name) |
---|
3 |
3 |
2 |
2 |
※各nameに紐づくtasteをcountしてるっぽい。
正しいクエリと結果
求めている結果とそのときのクエリ。
select count(DISTINCT name) from xxx;
count(DISTINCT name) |
---|
4 |
▼wikiのほうでもまとめておく。
Mysqlでのカウントや平均関連