mysql分组统计 显示统计为0的项 10
表info,记录每个用户的每种操作,字段如下:idnameresult1张三A2李四B3张三C4王五A5张三A6张三B7王五C8李四B9李四B10张三A需求是分别统计出每...
表info,记录每个用户的每种操作,字段如下:
id
name
result
1
张三
A
2
李四
B
3
张三
C
4
王五
A
5
张三
A
6
张三
B
7
王五
C
8
李四
B
9
李四
B
10
张三
A
需求是分别统计出每个用户每种结果的次数,就算是0也也要有单独的一行记录,如下:
name
result
count
张三
A
3
张三
B
1
张三
C
1
李四
A
0
李四
B
3
李四
C
0
王五
A
1
王五
B
0
王五
C
1
PS:可以在上面的结果中增加每个用户的总操作数吗?就是这样:
name
result
count
张三
总操作
5
李四
总操作
3
王五
总操作
2 展开
id
name
result
1
张三
A
2
李四
B
3
张三
C
4
王五
A
5
张三
A
6
张三
B
7
王五
C
8
李四
B
9
李四
B
10
张三
A
需求是分别统计出每个用户每种结果的次数,就算是0也也要有单独的一行记录,如下:
name
result
count
张三
A
3
张三
B
1
张三
C
1
李四
A
0
李四
B
3
李四
C
0
王五
A
1
王五
B
0
王五
C
1
PS:可以在上面的结果中增加每个用户的总操作数吗?就是这样:
name
result
count
张三
总操作
5
李四
总操作
3
王五
总操作
2 展开
展开全部
1、如果只是要【分别统计出每个用户每种结果的次数】,那只需要
select name,result,count(1) count
from info
group by name,result
这个应该是知道的。
2、但要求是【0也要有单独的一行记录】,那相当于要填充几条0的结果,可以通过join的笛卡尔积连接,实现所有可能,↓
select * from (select DISTINCT `name` from info)t1,(select DISTINCT result from info)t2
3、此时已经快接近结果了,只需将上面两个结果集进行左连接,再分组即可↓
select m.*,count(n.result) count from
(select * from (select DISTINCT `name` from info)t1,(select DISTINCT result from info)t2)m
left join
info n on m.`name`=n.`name` and m.result=n.result
group by m.`name`,m.result
4、由于需要【增加每个用户的总操作数】,只需要在最后面加上with rollup即可,mysql里的一个关键字,专门用来分组统计,↓
select m.*,count(n.result) count from
(select * from (select DISTINCT `name` from info)t1,(select DISTINCT result from info)t2)m
left join
info n on m.`name`=n.`name` and m.result=n.result
group by m.`name`,m.result
with rollup
看到没,很接近结果了。
5、整理优化下,把最后一条总的统计过滤掉,总操作数加进去
select t.`name`,ifnull(t.result,'总操作') result,t.count
from (select m.*,count(n.result) count
from (select * from (select DISTINCT `name` from info)t1,(select DISTINCT result from info)t2)m
left join
info n on m.`name`=n.`name` and m.result=n.result
group by m.`name`,m.result
with rollup
)t
where t.name is not null
推荐于2017-08-18
展开全部
mysql分组统计 显示统计为0的项
可直接用嵌套查询。
方法如下:
如数据:
id name
1 a
1 b
2 c
2 d
3 e
3 f
3 g
3 h
select count(t.counts) from
(select id,count(*) counts from 表名 group by id) t
这样得到的结果就是3。
可直接用嵌套查询。
方法如下:
如数据:
id name
1 a
1 b
2 c
2 d
3 e
3 f
3 g
3 h
select count(t.counts) from
(select id,count(*) counts from 表名 group by id) t
这样得到的结果就是3。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
WITH
a1 AS
(SELECT uname,count(uname) AS sl FROM #t1 WHERE urs='a' GROUP BY uname),
a2 AS
(SELECT uname,count(uname) AS sl FROM #t1 WHERE urs='b' GROUP BY uname),
a3 AS
(SELECT uname,count(uname) AS sl FROM #t1 WHERE urs='c' GROUP BY uname)
SELECT DISTINCT t.uname,'A' AS rs,isnull(a1.sl,0) AS sl FROM #t1 AS t LEFT JOIN a1 ON t.uname=a1.uname
UNION
SELECT DISTINCT t.uname,'B' AS rs,isnull(a2.sl,0) AS sl FROM #t1 AS t LEFT JOIN a2 ON t.uname=a2.uname
UNION
SELECT DISTINCT t.uname,'C' AS rs,isnull(a3.sl,0) AS sl FROM #t1 AS t LEFT JOIN a3 ON t.uname=a3.uname
UNION
SELECT uname,'I--->',count(uname) as sl FROM #t1 group by uname
ORDER BY t.uname
-------------------------------------
uname rs sl
李四 A 0
李四 B 3
李四 C 0
李四 I---> 3
王五 A 1
王五 B 0
王五 C 1
王五 I---> 2
张三 A 3
张三 B 1
张三 C 1
张三 I---> 5
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2017-08-15
展开全部
mysql分组统计 显示统计为0的项
可直接用嵌套查询。
方法如下:
如数据:
id name
1 a
1 b
2 c
2 d
3 e
3 f
3 g
3 h
select count(t.counts) from
(select id,count(*) counts from 表名 group by id) t
这样得到的结果就是3。
可直接用嵌套查询。
方法如下:
如数据:
id name
1 a
1 b
2 c
2 d
3 e
3 f
3 g
3 h
select count(t.counts) from
(select id,count(*) counts from 表名 group by id) t
这样得到的结果就是3。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
例如表名为sol ,根据表中的col1 列统计 sal字段的数据;
select sum(sal),col1
from sol t
group by col1
having sum(sal)=0 --在分组后加上统计结果为0的过滤条件就可以把数据筛选出来
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |