翼度科技»论坛 编程开发 mysql 查看内容

mysql count(*)分组之后IFNULL无效问题

9

主题

9

帖子

27

积分

新手上路

Rank: 1

积分
27
mysql count(*)分组后IFNULL无效

因为之前用oracle比较多,mysql没有经过系统性学习,所以这次碰到这个问题,弄了比较久,在此记录一下

需求

根据发票ID和单位来统计,一个ID下挂靠多少个单位
最开始的错误语句
  1.         SELECT
  2.             count(t.CostCenter) AS countNum
  3.         FROM
  4.             trip_plane_settlement t
  5.         WHERE
  6.             t.itineraryId = #{itineraryId}
  7.         GROUP BY
  8.             t.itineraryId,
  9.             t.CostCenter
复制代码
后台用int来接收时,如果返回空就会抛出异常,然后我就想用IFNULL()函数来实现,如果为空时返回0,但是发现还是返回还是为空,后来查阅资料之后,才发现如果分组之后,如果查询条件查不到数据时还是会返回null,后面尝试过 CASE WHEN 来实现,发下还是会返回null,因为查不到数据时,整个结果集都是空的,函数就不会生效。
后面就想用嵌套循环来实现试试,发现果然可以。

解决代码
  1. SELECT
  2.         IFNULL(count(*), 0) AS countNum
  3. FROM
  4.         (
  5.                 SELECT
  6.                         count(t.CostCenter) AS countNum,
  7.                         t.itineraryId,
  8.                         t.CostCenter
  9.                 FROM
  10.                         trip_plane_settlement t
  11.                 GROUP BY
  12.                         t.itineraryId,
  13.                         t.CostCenter
  14.         ) t1
  15. WHERE
  16.         t1.itineraryId = #{itineraryId}
复制代码
总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

来源:https://www.jb51.net/database/330788pke.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具