2010-11-28 2 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を開始しない限り、正確に1つの行を返します。

例では、idでグループ化しても、1つのIDでグループ化するため、1行しか取得できません。 WHEREステートメントを変更して、より多くのIDを組み込み、それらを派生テーブル内にグループ化します。

また、様々な集計関数については、MySQL manualをご覧ください。

よろしく

EDIT

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行戻ってほしい....最新の名前と値の合計とボリュームの合計 –

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行返されます。 –