mysql 分组统计,显示结果为0的项的sql语句

Never妥协 2021-02-02 09:13:34
先来看三条sql

select count(case_id) as count,case_id from test_problem GROUP BY case_id;
select count(case_id) as count,case_id from test_problem where solve_state='1' GROUP BY case_id;
select count(case_id) as count,case_id from test_problem where solve_state='0' GROUP BY case_id;

结果分别是这样的




我是准备分组查询统计个数,如果统计个数为0,结果中需要显示统计个数为0的记录。

我按照百度的结果写的sql

select IFNULL(t2.count,0),t2.case_id from test_problem t1 LEFT JOIN
(select count(case_id) as count,test_problem.case_id from test_problem where solve_state='1' GROUP BY case_id) t2
on t1.case_id=t2.case_id;

但是这样并不合适,结果是

正常的话,结果应该是像图一中那样的9条记录,然后case_id为24的那一列左边显示0,这个sql整的我心态都快崩了
...全文
988 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
AHUA1001 2021-02-03
  • 打赏
  • 举报
回复
引用 2 楼 Never妥协 的回复:
[quote=引用 1 楼 AHUA1001 的回复:]如果我没猜错,你需要的,应该是这个样子。
SELECT
COUNT(case_id) AS `COUNT`,
SUM(IF(solve_state='0',1,0)) COUNT0,
SUM(IF(solve_state='1',1,0)) COUNT1
case_id
FROM
test_problem
GROUP BY case_id ;
那啥,您可能理解错我的意思了,,是分组统计,,你这个分组求和吧。。[/quote]

最好还是执行一下,看看结果是不是你需要的。
Never妥协 2021-02-02
  • 打赏
  • 举报
回复
引用 1 楼 AHUA1001 的回复:
如果我没猜错,你需要的,应该是这个样子。 SELECT COUNT(case_id) AS `COUNT`, SUM(IF(solve_state='0',1,0)) COUNT0, SUM(IF(solve_state='1',1,0)) COUNT1 case_id FROM test_problem GROUP BY case_id ;
那啥,您可能理解错我的意思了,,是分组统计,,你这个分组求和吧。。
AHUA1001 2021-02-02
  • 打赏
  • 举报
回复
如果我没猜错,你需要的,应该是这个样子。
SELECT
COUNT(case_id) AS `COUNT`,
SUM(IF(solve_state='0',1,0)) COUNT0,
SUM(IF(solve_state='1',1,0)) COUNT1
case_id
FROM
test_problem
GROUP BY case_id ;
chengangcsdn 2021-02-02
  • 打赏
  • 举报
回复
引用 2 楼 Never妥协 的回复:
[quote=引用 1 楼 AHUA1001 的回复:]如果我没猜错,你需要的,应该是这个样子。 SELECT COUNT(case_id) AS `COUNT`, SUM(IF(solve_state='0',1,0)) COUNT0, SUM(IF(solve_state='1',1,0)) COUNT1 case_id FROM test_problem GROUP BY case_id ;
那啥,您可能理解错我的意思了,,是分组统计,,你这个分组求和吧。。[/quote] 在一定条件下,sum是可以替代count的哈。
老紫竹 2021-02-02
  • 打赏
  • 举报
回复
1、如果你从test_problem 统计,那么case_id至少有一行数据,所以最少的count也是1,不可能是0 2、所以你需要一个case_id的维度表,比如就叫case,然后做关联聚合 select a.case_id,count(*) from case a left join test_problem  b on a.case_id=b.case_id group by a.case_id having count(*)=0 order by case_id

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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