目前有一个需求,需要 统计最近答的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语句 统计 查询等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)