2009-08-22 124 views
0

我正在使用MySQL數據庫版本5.0.41(和PHP 5.2.6,但這可能與此問題無關)。SQL - 如何在同一個查詢中使用SUM和MAX?

我有一個表votes與以下字段:id,item_id,vote_value。 每當網站上的用戶對某個項目提交正面投票時,就會創建一個新行,其中包含相應的item_id和一個正數(即1)。當投票結果爲否定時,將創建一行,其中包含相應的item_id和負數(即-1)。 我想用一個查詢(如果可能的話)選擇票數最多的item_id。 要做到這一點,我首先需要總結每個人的所有投票item_id(獲得像38或-14的數字),然後選擇該數字的最大值。 我不知道如何編寫查詢。

你能幫忙嗎?

謝謝!

+0

意味着具有最高等級的項目,對「具有得票最多的ITEM_ID」? – Zed 2009-08-22 20:26:07

回答

3
SELECT item_id, SUM(vote_value) AS sum 
FROM votes 
GROUP BY item_id 
ORDER BY sum DESC 
LIMIT 1 
+0

謝謝!這裏的GROUP BY子句的目的是什麼? – 2009-08-22 20:33:36

+0

我想我明白了。如果沒有GROUP BY子句,則無論item_id(無論投票屬於哪個項目),sql都會簡單地選擇最高票數。因此,如果我有20票贊成一個詞,40票贊成另一個,而不是最大數額顯示爲40,它將顯示爲60 - 因爲它不是按任何分組的投票。 謝謝! – 2009-08-22 20:47:10

1

你可以這樣做:

SELECT item_id, SUM(vote_value) AS total, COUNT(id) AS c 
FROM votes 
GROUP BY item_id 
ORDER BY total DESC, c DESC 
LIMIT 1 
+0

謝謝!選擇計數的目的是什麼(即COUNT(id))? – 2009-08-22 20:25:27

+0

MAX應該是SUM,並且您還應該選擇item_id – Zed 2009-08-22 20:29:52

+0

如果「SUM」是相同的,我錯誤地認爲您的原始問題是「票數」是決勝負。如果票數不相關,那麼COUNT在這個查詢中沒有任何用處。 – VoteyDisciple 2009-08-22 20:31:10

相關問題