订购此声明

时间:2010-11-28 13:27:10

标签: mysql

我有以下声明。结果回来但记录没有排序。我做错了什么?

SELECT * 
FROM (
SELECT name, date, SUM(volume) AS sumVolume, SUM(value) AS sumValue
FROM table
WHERE id = 12
) AS TempTable
ORDER BY date DESC

2 个答案:

答案 0 :(得分:0)

我相信这就是你要找的东西:

SELECT * 
FROM (
  SELECT name, date, SUM(volume) AS sumVolume, SUM(value) AS sumValue
  FROM table
  WHERE id = 12
  GROUP BY date
) AS TempTable 
ORDER BY TempTable.date DESC

这将为您提供每天的音量和价值总和,然后按天为您排序结果。

没有“分组依据”的先前版本在许多情况下都没有正确地按日期汇总。

在外部选择语句中使用ORDER BY TempTable.date说明了您希望在日期顺序中显示的内容是内部查询的结果。

答案 1 :(得分:0)

此查询无法按预期运行。在派生表中使用SUM(这是一个AGGREGATE函数)会给你提前一行 - 除非你开始GROUP BY另一列。

在您的示例中,即使您按id分组,您仍然只会获得一行(因为您按一个ID分组)。更改WHERE语句以包含更多ID,并将它们分组到派生表中。

另外,请查看各种聚合函数的MySQL manual,了解它们的作用。

此致

修改
由于OP的要求有些明显,我会尽力帮助他解决问题:

SELECT x.name, x.date, y.vol, y.val
  FROM table AS x,
      ( SELECT MAX(date) AS date, SUM(volume) AS vol, SUM(value) AS val
          FROM table
         WHERE id = 12 ) AS y
 WHERE x.id = 12,
   AND x.date = y.date