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でのカウントや平均関連