sql
1SELECT
2 DATE(created_at) date,
3 COUNT(*) count,
4 (SELECT COUNT(*) FROM users AS F WHERE F.created_at >= '2017-03-11' AND F.created_at < ADDDATE(date, 1)) total_count
5FROM
6 users
7WHERE
8 created_at BETWEEN '2017-03-11' AND NOW()
9GROUP BY
10 date
11ORDER BY
12 date ASC
13;
実行結果
sql
1mysql> SELECT created_at FROM users ORDER BY created_at;
2+---------------------+
3| created_at |
4+---------------------+
5| 2017-03-10 23:59:59 |
6| 2017-03-11 14:01:51 |
7| 2017-03-11 14:30:15 |
8| 2017-03-12 09:50:06 |
9| 2017-03-12 13:00:35 |
10| 2017-03-12 16:07:38 |
11| 2017-03-13 13:22:40 |
12| 2017-03-14 07:08:08 |
13| 2017-03-15 09:43:30 |
14| 2017-03-16 07:59:23 |
15| 2017-03-16 11:18:16 |
16| 2017-03-16 22:25:10 |
17| 2017-03-17 21:50:36 |
18| 2017-03-18 04:24:20 |
19| 2017-03-18 11:13:47 |
20| 2017-03-18 18:30:28 |
21| 2017-03-20 02:38:39 |
22| 2017-03-20 17:44:32 |
23| 2017-03-20 22:17:21 |
24| 2017-03-22 03:31:54 |
25| 2017-03-22 20:38:54 |
26| 2017-03-23 00:00:00 |
27| 2017-03-23 00:00:01 |
28+---------------------+
2923 rows in set (0.00 sec)
30
31mysql> SELECT
32 -> DATE(created_at) date,
33 -> COUNT(*) count,
34 -> (SELECT COUNT(*) FROM users AS F WHERE F.created_at >= '2017-03-11' AND F.created_at < ADDDATE(date, 1)) total_count
35 -> FROM
36 -> users
37 -> WHERE
38 -> created_at BETWEEN '2017-03-11' AND NOW()
39 -> GROUP BY
40 -> date
41 -> ORDER BY
42 -> date ASC
43 -> ;
44+------------+-------+-------------+
45| date | count | total_count |
46+------------+-------+-------------+
47| 2017-03-11 | 2 | 2 |
48| 2017-03-12 | 3 | 5 |
49| 2017-03-13 | 1 | 6 |
50| 2017-03-14 | 1 | 7 |
51| 2017-03-15 | 1 | 8 |
52| 2017-03-16 | 3 | 11 |
53| 2017-03-17 | 1 | 12 |
54| 2017-03-18 | 3 | 15 |
55| 2017-03-20 | 3 | 18 |
56| 2017-03-22 | 2 | 20 |
57| 2017-03-23 | 2 | 22 |
58+------------+-------+-------------+
5911 rows in set (0.00 sec)
ちなみに、ご質問文のサブクエリでは、WHERE句を
sql
1WHERE
2 created_at BETWEEN '2017-03-11' AND curdate()
としておりますが、これを2017年03月23日に実行すると
'2017-03-11 00:00:00' <= created_at <= '2017-03-23 00:00:00'
という意味になり、当日分のデータが正しく取れません。
sql
1mysql> SELECT
2 -> DATE(created_at) date,
3 -> COUNT(*) count,
4 -> (SELECT COUNT(*) FROM users AS F WHERE F.created_at >= '2017-03-11' AND F.created_at < ADDDATE(date, 1)) total_count
5 -> FROM
6 -> users
7 -> WHERE
8 -> created_at BETWEEN '2017-03-11' AND curdate()
9 -> GROUP BY
10 -> date
11 -> ORDER BY
12 -> date ASC
13 -> ;
14+------------+-------+-------------+
15| date | count | total_count |
16+------------+-------+-------------+
17| 2017-03-11 | 2 | 2 |
18| 2017-03-12 | 3 | 5 |
19| 2017-03-13 | 1 | 6 |
20| 2017-03-14 | 1 | 7 |
21| 2017-03-15 | 1 | 8 |
22| 2017-03-16 | 3 | 11 |
23| 2017-03-17 | 1 | 12 |
24| 2017-03-18 | 3 | 15 |
25| 2017-03-20 | 3 | 18 |
26| 2017-03-22 | 2 | 20 |
27| 2017-03-23 | 1 | 22 | ※ ここの count の数がおかしい
28+------------+-------+-------------+
2911 rows in set (0.00 sec)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/23 05:17
2017/03/23 05:27