mysql按照日期和名称分组显示记录数
SELECT DATE(FROM_UNIXTIME(stime)) AS date, SUM(CASE WHEN name = 'baidu' THEN 1 ELSE 0 END) AS baidu, SUM(CASE WHEN name = 'shenma' THEN 1 ELSE 0 END) AS shenma, SUM(CASE WHEN name = 'bing' THEN 1 ELSE 0 END) AS bing, COUNT(*) AS total FROM zbp_cat_spider WHERE name IN ('baidu', 'shenma', 'bing') AND stime >= UNIX_TIMESTAMP(CURDATE() - INTERVAL 14 DAY) GROUP BY DATE(FROM_UNIXTIME(stime)) ORDER BY DATE(FROM_UNIXTIME(stime));
这个语句的作用是从zbp_cat_spider
表中查询最近14天内name
为’baidu’,'shenma’或’bing’的数据,并按照每天显示每个name
的记录数和总记录数。
SELECT
子句用来指定要显示的列,这里有五个列,分别是date
,baidu
,shenma,
bing
和total
。DATE(FROM_UNIXTIME(stime)) AS date
表示将stime
列从整数转换为日期时间类型,然后再提取日期部分,并将结果命名为date
。SUM(CASE WHEN name = 'baidu' THEN 1 ELSE 0 END) AS baidu
表示对于每一行数据,如果name
列的值为’baidu’,则返回1,否则返回0,然后将所有的返回值相加,并将结果命名为baidu
。这样就可以得到每个日期下’baidu’的记录数。SUM(CASE WHEN name = 'shenma' THEN 1 ELSE 0 END) AS shenma
和SUM(CASE WHEN name = 'bing' THEN 1 ELSE 0 END) AS bing
的作用和上面的类似,只是分别针对’shenma’和’bing’。COUNT(*) AS total
表示计算每个日期下的总记录数,并将结果命名为total
。FROM zbp_cat_spider
表示从哪个表中查询数据,这里是从zbp_cat_spider
表中查询。WHERE name IN ('baidu', 'shenma', 'bing') AND stime >= UNIX_TIMESTAMP(CURDATE() - INTERVAL 14 DAY)
表示筛选满足条件的数据,这里有两个条件,用AND
操作符连接。name IN ('baidu', 'shenma', 'bing')
表示只选择name
列的值为’baidu’,'shenma’或’bing’的数据。stime >= UNIX_TIMESTAMP(CURDATE() - INTERVAL 14 DAY)
表示只选择在最近14天内的数据。这里用了两个函数,一个是CURDATE()
,它返回当前日期;另一个是UNIX_TIMESTAMP()
,它将日期时间类型转换为整数类型。然后用减法运算符和间隔运算符得到14天前的日期,并用大于等于运算符和stime列进行比较。GROUP BY DATE(FROM_UNIXTIME(stime))
表示按照日期分组,这样就可以得到每个日期下的各个列的值。ORDER BY DATE(FROM_UNIXTIME(stime))
表示按照日期排序,这样就可以得到一个按时间顺序排列的结果。
效果如下: