2013-10-14 89 views
0

我有一個SQL表這樣的領域:SQL AVG()和ORDER BY組合

F1 40 
F2 30 
F3 120 
F4 77 
F5 12 
F6.. 
F7.. 

我想取回任何領域的平均值,但對它們進行排序按降序排列。

$query = "SELECT AVG(F1) as F1, AVG(F2) as F2, AVG(F3) as F3, (..) 
    FROM survey"; 

以上將檢索平均值好吧,但我怎麼能輸出他們以降序?

+2

你說F1,F2等是行,但它們是查詢中的列?你的桌子有什麼專欄? –

+0

對不起,哈姆扎,這令人困惑, - 這些是字段名稱。我已經相應地糾正了這個問題。 – richey

+0

由於字段(列)的數量有限且數量相對較少,您是否可以將它們全部抓取並在代碼中進行排序? –

回答

0

正常的ORDER BY方法應該適用於像AVG()SUM()這樣的集合函數。您應該能夠直接訪問字段的別名(例如F1 DESC),但如果這不起作用,您可能需要使用不同的方法。

嘗試使用查詢:

SELECT 
    AVG(F1) as F1_avg, AVG(F2) as F2_avg, AVG(F3) as F3_avg 
FROM 
    survey 
ORDER BY 
    F1_avg DESC; 

根據您目前的查詢,您將只接收單行這就背離了ORDER BY的目的。但是,如果您使用的是GROUP BY(並且未在問題中顯示),則上述內容應該可以正常工作。

+0

我明白...但我正在尋找的是按降序對得到的平均值進行排序。有沒有辦法做到這一點與SQL或我將不得不由我自己/代碼排序結果值? – richey

+0

我不確定你的意思是...你是說你想排序列自己而不是返回的行?換句話說,如果'F2'的平均值高於'F1',它是第一列呢?如果是這樣的話,那是不可能的(除非你建立了一個荒謬可靠的'UNION'聲明) – newfurniturey