Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 尝试在使用汇总后对查询排序_Mysql_Sql - Fatal编程技术网

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

在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       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()