zoukankan      html  css  js  c++  java
  • MySQL group by 不对 null 进行分组统计

    MySQL group by 不对 null 进行分组统计

    在使用 group by某列名进行分组统计时,该列名的数据有些为 null, 因而会出现 null 的数据行全部分成一组导致数据错误,所以 null 列名的数据行不能执行 group by

    IFNULL() 函数和 UUID() 函数

    网上有类似的解决方案,通过IFNULL()函数搭配UUID()函数即可解决。

    1、IFNULL() 函数

    IFNULL() 函数用于判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个参数的值。

    格式如下:

    IFNULL(expression, alt_value)
    -- 即可以是列名
    IFNULL(user.id, "hahha")
    -- 也可以是具体的值
    IFNULL(null, "hahha")
    

    image-20201214111856130

    2、UUID() 函数

    UUID()函数是可以生成时间上独一无二的值。

    select UUID()
    

    image-20201214112729830

    3、结合使用

    因此,在 group by 后使用这两个函数的格式可以如下

    group by IFNULL('列名', UUID())
    

    部分的sql语句如下,如果合同编码为空,则不进行分组。

    SELECT
    	c.code as '合同编码',
    	a.contract_money AS '合同总额',
    	a.maintain_money AS '维护费金额',
    	sum(a.actual_money) AS '已收款金额' 
    FROM
    	finance_contract_receipt a
    	LEFT JOIN business_customer b ON b.id = a.customer_id
    	LEFT JOIN finance_contract c ON c.id = a.contract_id
    	LEFT JOIN base_type d ON d.id = a.type 
    GROUP BY
    	IFNULL(c.code, UUID())
    ORDER BY
    	STR_TO_DATE(c.contract_date, '%Y-%m-%d') ASC;
    

    效果截图如下

    image-20201214114003055

    至此,问题解决。

    自我控制是最强者的本能-萧伯纳
  • 相关阅读:
    Linux 第一个脚本程序
    Linux 8开启FTP功能服务
    PPT 倒计时时钟,用 GIF 动画实现,可直接使用 -- 附 Python 实现代码
    python flask 虚拟环境迁移
    GOLANG学习之路之二
    Golang学习之路之一
    vscode 调试flask项目 解决(socket.gaierror: [Errno 11001] getaddrinfo failed)
    windows下部署 flask (win10+flask+nginx)
    git入门
    配置maven的国内镜像
  • 原文地址:https://www.cnblogs.com/CF1314/p/14132397.html
Copyright © 2011-2022 走看看