我有一个视频网站,我将点击统计信息存储在这样的表中:
+------------+------------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+-------------------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| user_id | int(10) unsigned | NO | MUL | NULL | |
| video_id | int(10) unsigned | NO | MUL | NULL | |
| user_agent | varchar(500) | NO | | NULL | |
| ip | varchar(255) | NO | | NULL | |
| date_add | timestamp | NO | MUL | CURRENT_TIMESTAMP | |
+------------+------------------+------+-----+-------------------+----------------+
我想每天显示统计信息(例如2012-02-14: 5000 web views, 850 iphone views
),如下所示:
+---------------------+---------+---------------+
| date | web | iphone |
+---------------------+---------+---------------+
| 2012-02-09 | 500 | 478 |
| 2012-02-10 | 2377 | 204 |
| 2012-02-12 | 247 | 21 |
| 2012-02-13 | 4879 | 236 |
| 2012-02-14 | 8767 | 101 |
+---------------------+---------+---------------+
iPhone用户ID为2422
,其他用户为网络用户。
我很抱歉我的英语不好。
答案 0 :(得分:2)
SELECT DATE(date_add) AS date,
SUM(CASE WHEN user_id = 2422 THEN 0 ELSE 1 END) AS Web,
SUM(CASE WHEN user_id = 2422 THEN 1 ELSE 0 END) AS iPhone
FROM stats
GROUP by DATE(date_add)
答案 1 :(得分:0)
如果我理解你的问题,那么像这样的查询应该这样做:
SELECT
DATE(date_add) AS date,
SUM(user_id != 2422) AS web,
SUM(user_id = 2422) AS iphone
FROM stats
GROUP BY date
你可以try it on SQLize。
顺便说一下,如果你想计算“唯一访问者”(通过匹配用户ID,用户代理字符串和IP地址来标识),你可以使用子查询来实现:
SELECT
date,
SUM(user_id != 2422) AS web,
SUM(user_id = 2422) AS iphone
FROM
( SELECT DATE(date_add) AS date, user_id
FROM stats
GROUP BY date, user_id, ip, user_agent ) AS foo
GROUP BY date
(如果您不需要在iPhone和非iPhone用户之间分配计数,则可以使用COUNT(DISTINCT user_id, ip, user_agent)
而不是子查询。)