Mysql 尝试在使用汇总后对查询排序
在mysql中,我需要按年/月顺序排列结果如下:Mysql 尝试在使用汇总后对查询排序,mysql,sql,Mysql,Sql,在mysql中,我需要按年/月顺序排列结果如下: Month Mod1 Mod2 Mod3 Jan/2013 5 4 2 Jan/2013 1 5 3 Total 6 9 5 Feb/2013 6 3 2 Feb/2013 2 1 4 Total 8
Month Mod1 Mod2 Mod3
Jan/2013 5 4 2
Jan/2013 1 5 3
Total 6 9 5
Feb/2013 6 3 2
Feb/2013 2 1 4
Total 8 4 6
Mar/2014 6 3 2
Mar/2014 2 1 4
Total 8 4 6
按年/月分类的订购说明应为:
Month Mod1 Mod2 Mod3
Mar/2014 6 3 2
Mar/2014 2 1 4
Total 8 4 6
Feb/2013 6 3 2
Feb/2013 2 1 4
Total 8 4 6
Jan/2013 5 4 2
Jan/2013 1 5 3
Total 6 9 5
查询是:
SELECT
month,
year,
SUM(IF(mod = 1, 1, 0)) AS mod1,
SUM(IF(mod = 2, 1, 0)) AS mod2,
SUM(IF(mod = 3, 1, 0)) AS mod3
FROM
DW_RM_Log
WHERE
...
GROUP BY
year, month
WITH ROLLUP
HAVING year IS NOT NULL AND month IS NOT NULL
我不能只插入orderby year,month DESC,因为我得到了以下错误:“SQLSTATE[HY000]:一般错误:1221 CUBE/ROLLUP和orderby的用法不正确”。有什么建议吗?要回答您关于在带有汇总的
查询上强制执行订单的具体问题,只需将其转换为子查询:
SELECT *
FROM
(
SELECT
month,
year,
SUM(IF(mod = 1, 1, 0)) AS mod1,
SUM(IF(mod = 2, 1, 0)) AS mod2,
SUM(IF(mod = 3, 1, 0)) AS mod3
FROM
DW_RM_Log
WHERE
...
GROUP BY
year, month
WITH ROLLUP
HAVING year IS NOT NULL AND month IS NOT NULL
) a
ORDER BY year, month DESC
要回答有关在使用汇总的查询上强制执行ORDER BY
的特定问题,只需将其转换为子查询:
SELECT *
FROM
(
SELECT
month,
year,
SUM(IF(mod = 1, 1, 0)) AS mod1,
SUM(IF(mod = 2, 1, 0)) AS mod2,
SUM(IF(mod = 3, 1, 0)) AS mod3
FROM
DW_RM_Log
WHERE
...
GROUP BY
year, month
WITH ROLLUP
HAVING year IS NOT NULL AND month IS NOT NULL
) a
ORDER BY year, month DESC
在MySQL中,groupby
进行排序。虽然隐式排序现在已被弃用,但您仍然可以安全地执行显式排序。以下内容应满足您的要求:
SELECT month, year,
SUM(mod = 1) AS mod1, SUM(mod = 2) AS mod2, SUM(mod = 3) AS mod3
FROM DW_RM_Log
WHERE ...
GROUP BY year DESC, month DESC WITH ROLLUP
HAVING year IS NOT NULL AND month IS NOT NULL;
注意,我还简化了sum()
条件。在MySQL中,您可以只使用条件本身,而不是在MySQL中包含if()
,groupby
进行排序。虽然隐式排序现在已被弃用,但您仍然可以安全地执行显式排序。以下内容应满足您的要求:
SELECT month, year,
SUM(mod = 1) AS mod1, SUM(mod = 2) AS mod2, SUM(mod = 3) AS mod3
FROM DW_RM_Log
WHERE ...
GROUP BY year DESC, month DESC WITH ROLLUP
HAVING year IS NOT NULL AND month IS NOT NULL;
注意,我还简化了sum()
条件。在MySQL中,您可以只使用条件本身,而不包括if()