2010-11-28 78 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