我有以下聲明。結果回來但記錄沒有排序。我究竟做錯了什麼?訂購此聲明
SELECT *
FROM (
SELECT name, date, SUM(volume) AS sumVolume, SUM(value) AS sumValue
FROM table
WHERE id = 12
) AS TempTable
ORDER BY date DESC
我有以下聲明。結果回來但記錄沒有排序。我究竟做錯了什麼?訂購此聲明
SELECT *
FROM (
SELECT name, date, SUM(volume) AS sumVolume, SUM(value) AS sumValue
FROM table
WHERE id = 12
) AS TempTable
ORDER BY date DESC
此查詢不會按照您的預期工作。在派生表中使用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
我認爲,這是你在找什麼:
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
可以說明您希望以日期順序呈現的內容是內部查詢的結果。
我應該澄清。我只想要返回1行,其中包含人的最近名稱以及所有音量和所有值之和的總和。 – 2010-11-28 14:10:20
我只想要1行回來....最近的名字和價值和總和的音量 – 2010-11-28 14:14:01