MySQL通过rollup、coalize/ifnull和date函数进行分组



我遇到了MySQL的ROLLUP和处理结果NULL的问题。IFNULL/COALESCE函数与普通列配合使用很好,但与日期函数配合使用时似乎会崩溃。示例如下:

SELECT
    YEAR(date_time) AS Year,
    count(x) AS Count
FROM mytable
GROUP BY year WITH ROLLUP

返回(如预期)

Year Count
---- -----
2015 3
2016 2
NULL 5

当我查询非日期列(例如varchar)时,我可以通过使用IFNULL或COALESCE函数将NULL值替换为字符串来处理NULL值。然而,当我将相同的逻辑应用于上述查询时,它似乎不起作用。

SELECT
    COALESCE(YEAR(date_time), 'moo') AS Year,
    count(x) AS Count
FROM mytable
GROUP BY year WITH ROLLUP

SELECT
    IFNULL(YEAR(date_time), 'moo') AS 'year',
    count(x) AS Count
FROM mytable
GROUP BY year WITH ROLLUP

返回

Year Count
---- -----
2015 3
2016 2
NULL 5

而不是预期的

Year Count
---- -----
2015 3
2016 2
moo  5

有什么想法和建议吗?

如果您试图针对在聚合汇总计算期间生成的NULL(而不是原始数据中的NULL),那么您指的是错误的NULL。如果是这样,这可能就是您想要做的:

SELECT
    IFNULL(m.year, 'moo')
FROM
    (SELECT
        YEAR(date_time) AS 'year'
     FROM
        mytable
     GROUP BY
        year
     WITH ROLLUP) m

这是sqlfiddle。

最新更新