今回はこんなテーブルを考えます。
create table quest (id varchar(5), time timestamp,quest_id varchar(7), win integer);
quest_idは良くあるクエスト1-3とか。winはそのクエストが成功すれば1、失敗すれば0。入力データはこんな感じ。
select * from quest;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
id | time | quest_id | win |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
1 | 2020-03-19 15:55:00 | 101 | 1 |
1 | 2020-03-19 15:57:00 | 102 | 1 |
1 | 2020-03-19 16:11:00 | 103 | 0 |
3 | 2020-03-23 11:05:00 | 101 | 1 |
3 | 2020-03-23 11:07:00 | 102 | 1 |
3 | 2020-03-23 11:11:00 | 103 | 1 |
5 | 2020-03-19 16:11:00 | 101 | 0 |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
(なぜか歪んだ。見づらくてすいません。)
で、このとき、冒険101をやった人は3人だとわかりますが、データの桁が何十万となると数えるのは至難。そこで登場するのがcount。
101をやった人を数えたい時は
select count(DISTINCT id) from quest where quest_id='101';
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
count(DISTINCT id) |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
3 |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
で出力されます。そのうちでクリアした人を求めたいなら
mysql> select count(DISTINCT id) from quest where quest_id='101' and win='1';
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
count(DISTINCT id) |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
2 |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
1 row in set (0.00 sec)
で出力されます。