【问题标题】:IFNULL() MySQL not working as expected in combination with ROLLUPIFNULL() MySQL 与 ROLLUP 结合使用时无法按预期工作
【发布时间】:2021-10-02 10:44:12
【问题描述】:

我有一个 MySQL 查询。

SELECT 
YEAR(Date) 'Year',
MONTH(Date)'Month',
SUM(Amount)'Amount' 
FROM Bill.Statistics 
LEFT JOIN Employees.Employee
ON Bill.Statistics.Employee = Employees.Employee.ID
WHERE Employees.Employee.Department LIKE '%%' 
AND Bill.Statistics.Employee LIKE '%%'
AND Date>='2020-10-01' AND Date<='2021-03-31' 
GROUP BY YEAR(Date),MONTH(Date) 
WITH ROLLUP

这给了我一个结果。

Year Month Amount
2020 10 10.10
2020 11 11.11
2020 12 12.12
2020 NULL 33.33
2021 1 1.01
2021 2 2.02
2021 3 3.03
2021 NULL 6.06
NULL NULL 39.39

现在,当我尝试使用 IFNULL() 来摆脱 NULL 并在此处放一个破折号时,我会通过以下代码得到以下结果。

SELECT 
IFNULL(YEAR(Date), '-') AS 'Year',
IFNULL(MONTH(Date),'-') AS 'Month',
SUM(Amount)'Amount' 
FROM Bill.Statistics 
LEFT JOIN Employees.Employee
ON Bill.Statistics.Employee = Employees.Employee.ID
WHERE Employees.Employee.Department LIKE '%%' 
AND Bill.Statistics.Employee LIKE '%%'
AND Date>='2020-10-01' AND Date<='2021-03-31' 
GROUP BY YEAR(Date),MONTH(Date) 
WITH ROLLUP
Year Month Amount
2020 10 10.10
2020 11 11.11
2020 12 12.12
2020 12 33.33
2021 1 1.01
2021 2 2.02
2021 3 3.03
2021 3 6.06
2021 3 39.39

就像你一样,它只是将前一个值的最后一个值复制到 NULL 所在的单元格中。

谁能告诉我为什么会这样? 我只是想让所有的 NULL 都变成简单的破折号。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    据我所知,汇总行(生成那些 NULL 值according to docs)是在选择数据“之后”生成的。我认为您应该像这样包装 SELECT:

    SELECT
        IFNULL(s.`Year`, 'Total Year') AS `Year`,
        IFNULL(s.`Month`, 'Total Month') AS `Month`,
        s.`Amount`
    FROM
    
    (SELECT 
        YEAR(Date) 'Year',
        MONTH(Date) 'Month',
        SUM(Amount) 'Amount' 
    FROM Bill.Statistics 
        LEFT JOIN Employees.Employee
        ON Bill.Statistics.Employee = Employees.Employee.ID
    WHERE Employees.Employee.Department LIKE '%%' 
        AND Bill.Statistics.Employee LIKE '%%'
        AND Date>='2020-10-01' AND Date<='2021-03-31' 
        GROUP BY YEAR(Date),MONTH(Date) 
        WITH ROLLUP
    ) AS s
    

    【讨论】:

    • 这正是发生的事情!现在我明白为什么会这样了。感谢您的快速回复。
    猜你喜欢
    • 2020-12-01
    • 2022-06-11
    • 1970-01-01
    • 2016-02-18
    • 2022-11-23
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多