sql 统计每天(每周每月)同一字段不同状态的数据

松鼠不是鼠 2018-06-11 04:19:57
直接上例子,类似
我要统计每天的flowtype分别为1,2的数量,按天数分组
显示结果类似于这样
time count(flowtype=1) count(flowtype=2)
2018-06-11 12 23
2018-06-09 0 24
............
flowtype还有一个默认值是0,不是每个值都是1或2,还有就是,不是每一天都有flowtype=1或2,所有没有的时候我要显示为0
大神们有什么主意吗
...全文
1524 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sq1303037035 2018-06-12
  • 打赏
  • 举报
回复
select DATE_FORMAT(p1.time,'%Y-%m-%d') grouptime,COUNT(1) upcount,p2.count from table p1 left join (SELECT DATE_FORMAT(time,'%Y-%m-%d') day,COUNT(1) count FROM table where flowtype=1 GROUP BY day) p2 on DATE_FORMAT(p1.time,'%Y-%m-%d')=p2.`day` where p1.flowtype=2 GROUP BY grouptime 在你的思路上left join一下即可。
maradona1984 2018-06-12
  • 打赏
  • 举报
回复
引用 3 楼 u013845168 的回复:
[quote=引用 1 楼 stacksoverflow 的回复:] 先说说你的思路,卡在哪里
是这样的,我现在count每天的数据,每天的都统计,如果这一天没有数据,给我显示0,而不是直接跳过不显示这一天,现在就是好比如,2018-06-11这天,没有flowtype=2的数据,我count的时候他就直接不显示这天,导致我后面的一下关联没法再时间上关联 附上我想的sql select DATE_FORMAT(p1.time,'%Y-%m-%d') grouptime,COUNT(1) upcount , p2.count from table p1 ,(SELECT DATE_FORMAT(time,'%Y-%m-%d') day, COUNT(1) count FROM table where flowtype=1 GROUP BY day) p2 where p1.flowtype=2 AND DATE_FORMAT(time,'%Y-%m-%d')=p2.`day` GROUP BY grouptime [/quote] 那你只能搞个表,只有一个日期列,保存每天的日期,然后左关联,不然没法玩
stacksoverflow 2018-06-11
  • 打赏
  • 举报
回复
把我的sql改一下,我在oracle上面做的,基本上是用两个表,一个表查询所有的日期,另一个表查询需要的日期和flowtype,然后做左连接操作,没连接上的显示flowtype为0。
松鼠不是鼠 2018-06-11
  • 打赏
  • 举报
回复
补充一下,数据库是mysql
松鼠不是鼠 2018-06-11
  • 打赏
  • 举报
回复
引用 1 楼 stacksoverflow 的回复:
先说说你的思路,卡在哪里
是这样的,我现在count每天的数据,每天的都统计,如果这一天没有数据,给我显示0,而不是直接跳过不显示这一天,现在就是好比如,2018-06-11这天,没有flowtype=2的数据,我count的时候他就直接不显示这天,导致我后面的一下关联没法再时间上关联 附上我想的sql select DATE_FORMAT(p1.time,'%Y-%m-%d') grouptime,COUNT(1) upcount , p2.count from table p1 ,(SELECT DATE_FORMAT(time,'%Y-%m-%d') day, COUNT(1) count FROM table where flowtype=1 GROUP BY day) p2 where p1.flowtype=2 AND DATE_FORMAT(time,'%Y-%m-%d')=p2.`day` GROUP BY grouptime
stacksoverflow 2018-06-11
  • 打赏
  • 举报
回复
oracle下可以用如下查询,其他的数据库按照自己需求改! select a.ymd,decode(b.flowtype,null,0,b.flowtype) as flowtype from ( select to_char(time,'yyyy/mm/dd') as ymd from your_table group by to_char(time,'yyyy/mm/dd') ) a left outer join ( select flowtype,count(flowtype) count,to_char(time,'yyyy/mm/dd') ymd from your_table where flowtype in ('1','2') group by to_char(time,'yyyy/mm/dd'),flowtype order by to_char(time,'yyyy/mm/dd'), flowtype ) b on a.ymd = b.ymd
stacksoverflow 2018-06-11
  • 打赏
  • 举报
回复
先说说你的思路,卡在哪里

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧