mysql计数多列

时间:2012-02-14 19:56:00

标签: mysql sql

我有一个视频网站,我将点击统计信息存储在这样的表中:

+------------+------------------+------+-----+-------------------+----------------+
| 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,其他用户为网络用户。

我很抱歉我的英语不好。

2 个答案:

答案 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)而不是子查询。)