2010-11-28 131 views
1

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

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

回答

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 
+0

我只想要1行回来....最近的名字和价值和总和的音量 – 2010-11-28 14:14:01

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 

这会给你数量和价值的每一天的总和,再下订单一天为你的结果。

在许多情况下,没有'group by'的先前版本不能正确地给出日期总和。

在外部select语句中使用ORDER BY TempTable.date可以说明您希望以日期顺序呈现的内容是内部查询的结果。

+0

我应该澄清。我只想要返回1行,其中包含人的最近名称以及所有音量和所有值之和的总和。 – 2010-11-28 14:10:20