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

mysql count(*)分组后IFNULL无效

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

需求

根据发票ID和单位来统计,一个ID下挂靠多少个单位

最开始的错误语句

1
2
3
4
5
6
7
8
9
SELECT
    count(t.CostCenter) AS countNum
FROM
    trip_plane_settlement t
WHERE
    t.itineraryId = #{itineraryId}
GROUP BY
    t.itineraryId,
    t.CostCenter

后台用int来接收时,如果返回空就会抛出异常,然后我就想用IFNULL()函数来实现,如果为空时返回0,但是发现还是返回还是为空,后来查阅资料之后,才发现如果分组之后,如果查询条件查不到数据时还是会返回null,后面尝试过 CASE WHEN 来实现,发下还是会返回null,因为查不到数据时,整个结果集都是空的,函数就不会生效。

后面就想用嵌套循环来实现试试,发现果然可以。

解决代码

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持IT俱乐部。

本文收集自网络,不代表IT俱乐部立场,转载请注明出处。https://www.2it.club/database/mysql/15382.html
上一篇
下一篇
联系我们

联系我们

在线咨询: QQ交谈

邮箱: 1120393934@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部