SQL心得:在含有GROUP BY的SELECT语句中显示COUNT()为0的结果

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

1.问题

如下ExampleTable表,求各种类(CategoryID)满足Flag等于1的记录数。

ID   FlagCategoryID

1     1     1

2     1     1

3     1     2

4     1     2

5     0     3

          表1-ExampleTable

理想的结果应该如下:

CategoryID     TotalNum

1     2

2     2

3     0

          表2-理想输出结果

初看此问题,我们很容易写出如下语句:

SELECT CategoryID,COUNT(1) AS TotalNum FROM ExampleTable WHERE flag = 1 GROUP BY CategoryID

可运行之后得到的结果如下:

CategoryID     TotalNum

1     2

2     2

          表3-错误输出结果

没有CategoryID=3,TotalNum=0的记录。

2.原因分析:

造成以上结果的原因是因为在SELECT语句中WHERE子句先于GROUP BY执行,因此在执行GROUP BY子句时

表中的记录已经将Category = 3的记录过滤,分组处理中自然不会计算在内。

  补充:SQL SELECT语句完整的执行顺序

3.解决方案:

构造含有所有CategoeyID的结果集与其上语句所得结果集进行连接,并利用NULL替换函数

(如SQL SERVER中的ISNULL()、ORACLE中的NVL())将NULL替换为0。

示例语句如下:

SELECT DISTINCT MainTable.CategoryID,ISNULL(SubTable.SubNum, 0) AS TotalNum FROM ExampleTable AS MainTable LEFT JOIN

(SELECT CategoryID,COUNT(1) AS SubNum FROM ExampleTable WHERE flag = 1 GROUP BY CategoryID) AS SubTable

ON MainTable.CategoryID = SubTable.CategoryID

  

执行后即可返回正确的结果:

CategoryID     TotalNum

1     2

2     2

3     0

          表4-正确输出结果

  

SQL GROUP BY 语句SQL HAVING 子句 GROUP BY 语句可结合一些聚合函数来使用。 阅读详情

相关推荐

数据去重,用DISTINCT还是GROUP BY

MapReduce Job卡在了最后一个ReduceTask,任务迟迟未运行成功,ReduceTask只有一个如果某个Job任务卡在99%不动,例如,某个Reduce的时间比其他Reduce时间长的多,大部分Task在1分钟左右完成,只有一个Task执行20多分钟还没完成。这时我们就应该考虑出现数据倾斜了如果每个ReduceTask执行时间差不多,都特别长,不一定是数据倾斜导致的,可能是ReduceTask设置过少导致的。这时可以调整ReduceTask个数。

Java/Python大数据随笔 1560

mysqlcount0的记录也显示出来

在MySQL中使用count()函数对数据进行统计分析时,无法统计到0的问题。同时涉及到统计本周、本月、本年的函数计算。

BYO 1722

使用group by子句如何显示count()等于0结果

SQL Server数据库查询中,为了对查询结果进行对比、分析,我们经常会用到GROUP BY子句以及COUNT()函数来对查询结果进行分类、统计等。但是我们在使用的过程中往往会存在一些问题,就是当有where条件时,被where条件过滤的数据不显示了,所以count()函数等于0结果并没有显示。 现在有一张表sc的数据如下(sno学生编号,cno课程编号,score分数):  我想...

斯维特哈特 1万+

MySQL含有GROUP BY子句的查询中如何显示COUNT()0结果

如下表所示 所以,只需要精确到小数点后7位,精度就是1CM,因此,数据库保存经纬度采用 decimal(10,7) 即可。 问题1:为什么不采用float? 答:float,double容易产生误差,对精确度要求比较高时,建议使用decimal来存,decimal在mysql内存是以字符串存储的, 问题2:为什么不用字符串? 答:字符串不方便数据库计算 如下表所示 所以,只需要精确到小数点后7...

OceanStar的博客 3572

SQL统计部门人数,人数为0的部门也要显示出来

相同点:它们都以一张部门表(或类别表),其它表都有部门编号DepartmentID(类别编号) 案例一:一张表 select c.DepartmentID,c.DepartmentName, t.Num AS '人员数量' from T_Department as cleft join (select DepartmentID,COUNT(*) AS Num from T_User...

weixin_30877493的博客 7944

SQL心得】:在含有GROUP BYSELECT语句中如何显示COUNT()0结果

SQL心得】:在含有GROUP BYSELECT语句中如何显示COUNT()0结果1.问题 ID Flag CategoryID 1 1 1 2 1 1 3 1 2 4 1 2 5 0 3表1-ExampleTable 理想的结果应该如下: CategoryID TotalNum 1 2 2 2 3

陌上少年的专栏 7798

GROUP BY语句详解

一、group by 的意思为分组汇总。 使用了group by 后,要求Select出的结果字段都是可汇总的,否则就会出错。 group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面。 比如,有:{学号,姓名,性别,年龄,成绩}字段 这样写: SELECT 学号,姓名,性别,年龄,sum(成绩) FROM 学生表 GROUP B...

s00229295的博客 13万+

解决Mysql:1055 - Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated

SELECT 日期,地域,活跃度,COUNT(qq号) as qq个数 FROM (SELECT a.`日期`,a.`qq号`,a.`地域`,IF(b.msg>=200,'高活跃度','低活跃度') AS 活跃度 FROM table_user AS a LEFT JOIN table_act AS b ON a.`日期` = b.ftime AND a.qq号 = b.qq WHERE a.`地域` IN ('广东','广东省'))t GROUP BY 日期,活跃度; 以上代码运行报错.

qq_39954916的博客 4万+

含有GROUP BY子句的查询中如何显示COUNT()0结果

name age flg li 10 1 zhang 11 0 wang 11 1 我们有时想要的结果count age name 1 10 li 1 11 zhang 1 11 wang 执行这句sql SELECT COUNT(NAME),AGE,NAME FROM TABLE WHERE flag = 1 GROUP BY NA...

方方园园的博客 1323

GROUP BY子句的查询中显示COUNT()0结果

含有GROUPBY子句的查询中如何显示COUNT()0结果SQLServer数据库查询中,为了对查询结果进行对比、分析,我们经常会用到GROUPBY子句以及COUNT()函数来对查询结果进行分类、统计等。但是我们在使用的过程中往往会存在一些问题,本文我们就介绍了一个问题,并给出了它的解决方案,接下来就让我们来一起了解一下这部分内容吧。 1.问题: 如下ExampleTab...

weixin_30451709的博客 697

MySql含有GROUP BY子句的查询中如何显示COUNT()0结果

MySql含有GROUP BY子句的查询中如何显示COUNT()0结果

石磊的博客 1万+

sql分组查询group by结合count,sum统计语句的实现(附带sql详细分析步骤)

日常写代码经常会遇到数据统计的业务场景,分组查询 group by 结合 count 和 sum 的复杂语句写起来容易令人头大,在这里分享几种常用的统计场景,做个记录的同时也希望能帮到大家。 场景1:统计每个学生的加分次数/总加分 and 减分次数/总减分 库表结构如下所示: 学生分数表:student_score 字段名 含义 字段类型 备注 id 自增编号 bigint student_name 学生姓名 varchar score 分数 double sort 分数类

盛夏温暖流年 4万+

oracle nvl count 1 0,含有GROUP BY子句的查询中如何显示COUNT()为0的成果(分享)...

SQLServer数据库查询中,为了对查询成果进行对比、解析,我们经常会用到GROUPBY子句以及COUNT()函数来对查询成果进行分类、统计等。然则我们在应用的过程中往往会存在一些题目,本文我们就介绍了一个题目,并给出了它的解决规划,接下来就让我们来一路懂得一下这项目组内容吧。1.题目:如下ExampleTable表,求各类类(CategoryID)满足Flag便是1的记录数。IDFlagCa...

weixin_42242323的博客 1320

SQLgroup by 1, order by 1 语句是什么意思

SQLgroup by 1, order by 1 语句是什么意思? 1指的是select语句后面第一列(属性)

还没有干货 1万+

mysql count0_MySQL中在含有GROUP BYSELECT语句显示COUNT()0结果_MySQL

bitsCN.comMySQL中在含有GROUP BYSELECT语句显示COUNT()0结果mysql> select * from t1;+-------+------+| level | name |+-------+------+| 1 | a || 1 | b || 1 | c || 2 | a || 2 | ...

weixin_42509293的博客 364

MySQL GROUP BY 语句

本文介绍了SQLGROUP BY语句的用法,包括基本语法、分组统计和WITH ROLLUP扩展功能。通过employee_tbl表示例,演示了按姓名分组统计记录数(COUNT)和登录次数总和(SUM)。特别说明了WITH ROLLUP可以生成汇总行,以及如何使用COALESCE函数替换NULL值。文章还对比了GROUP BY与DISTINCT的去重效果,并解释了WHERE、GROUP BY、HAVING和ORDER BY等关键字的执行顺序差异,最后给出了一个包含所有条件的综合查询示例。这些内容涵盖了GRO

ywl470812087的博客 12万+

MySQLSELECT,WHERE,GROUP BY及聚合函数详解

   第一部分讲述了关于MySQL以及HeidiSQL软件的安装,不熟悉的朋友可以参考一些 ,—>>传送门,那么本部分开始SQL语句的学习。为了方便讲解,本部分利用MySQL的实例数据库,下载地址,下载完以后解压在你熟悉的文件夹即可。 1. 导入数据库     如果你喜欢在终端进行SQL操作,那么只需要打开MySQL终端,就着这样的样子 接下来我演示一下怎么将数据库导入我们的MySQL...

sun_xiao_kai的博客 6354
下一篇: input中text设置不可修改
lanfangyi
博客等级 码龄14年 2粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值