数据库分组取Top再统计sql编写

数据库分组取Top再统计sql编写,第1张

目前有一个需求,需要 统计最近答的4道题目中,答对超过3道题目的用户 ,这里就会涉及到mysql group by后,再取前4条,然后判断是否答对的判断。对于这种分组取top,再处理,一直都是mysql比较软肋的地方。

那么这个sql要怎么写呢。

表:

核心就是括号里面的这段sql, 将数据取前4条题目,转变成了用userid + 创建时间来对数据进行一个排序,并且对每条数据都用rank进行排序标记,用于后面的筛选

可以看一下括号里面sql数据执行完的情况

那么最终的结果:

select 村名,sum(case when 内容分类='家庭矛盾' then 1 end) 家庭矛盾, sum(case when 内容分类='自然灾害、环境保护' then 1 end) 自然灾害、环境保护, sum(case when 内容分类='经济' then 1 end) 经济, sum(case when 处理情况='已办结' then 1 end) 已办结,sum(case when 处理情况='正在办结' then 1 end) 正在办结,sum(case when 处理情况='未办结' then 1 end) 未办结 from table group by 村名

昨天就给你说的

。。

select

sum(XSSLDJ),MONTH(XSSJ)

from

tb_XS

group

by

(year(xssj)-MONTH(XSSJ);)

是这个意思吗?

select bziduan1,ifnull(ccounts,0) from 表2 b left join

(select ziduan1,count() counts from 表1 group by ziduan1) c

on bziduan1=cziduan1

-----补充----

这个改了好几次,之前就是想弄的简单点,可惜欠考虑了

比如俩表直接left join,这样会出现d null的情况,而再统计count时把这条也算做一条记录了,你也找找吧,我也测测有更好的办法没

------补充-----

写了个这种写法,你看看

select bziduan1,

sum(case when aziduan1=bziduan1 then 1 else 0 end) from 表2 b

left join 表1 a on

aziduan1=bziduan1

group by bziduan1

以上就是关于数据库分组取Top再统计sql编写全部的内容,包括:数据库分组取Top再统计sql编写、用SQL统计数据库报表、数据库 mysql sql语句 统计 查询等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9318479.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存