当前位置:首页 > 实验室 > mysql按照日期和名称分组显示记录数

mysql按照日期和名称分组显示记录数

一叶知秋2023-03-29 12:53:40实验室1584
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子句用来指定要显示的列,这里有五个列,分别是datebaidu,shenmabingtotal

  • 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 shenmaSUM(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))表示按照日期排序,这样就可以得到一个按时间顺序排列的结果。


效果如下:

image.png

扫描二维码推送至手机访问。

版权声明:本站部分文章来自互联网采集,请查看免责申明

本文链接:https://www.yyzq.team/post/290892.html

标签: mysql
分享给朋友:

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。