2009-08-22 15 views
0

Ich arbeite mit einer MySQL-Datenbank Version 5.0.41 (und PHP 5.2.6, obwohl das für diese Frage möglicherweise nicht relevant ist).SQL - Wie SUMME und MAX in derselben Abfrage verwenden?

Ich habe eine Tabelle votes mit den folgenden Feldern genannt: id, item_id, vote_value. Jedes Mal, wenn ein Benutzer auf der Website eine positive Bewertung für ein Element sendet, wird eine neue Zeile mit der entsprechenden item_id und einer positiven Zahl (d. H. 1) erstellt. Wenn die Abstimmung negativ ist, wird eine Zeile mit dem entsprechenden item_id und einer negativen Zahl (d. H. -1) erzeugt. Ich möchte mit einer Abfrage (wenn möglich) die item_id auswählen, die die meisten Stimmen hat. Um dies zu tun, muss ich zuerst alle Stimmen für jede Person item_id zusammenfassen (um eine Zahl wie 38 oder -14 zu erhalten) und dann das Maximum für diese Nummer auswählen. Ich bin mir nicht sicher, wie man die Abfrage dafür schreibt.

Können Sie mir helfen?

Danke!

+0

„der item_id, die die meisten Stimmen hat“ bedeutet, das Element, das die höchste Bewertung hat, nicht wahr? – Zed

Antwort

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

danke !! Was ist der Zweck der GROUP BY-Klausel hier? –

+0

Ich denke, ich habe es herausgefunden. Ohne die GROUP BY-Klausel wählt sql unabhängig von der item_id einfach die höchste Summe der Stimmen aus (unabhängig davon, zu welchem ​​Element die Stimmen gehören). Wenn ich also 20 Stimmen für ein Wort und 40 für ein anderes Wort habe, wird anstelle der maximalen Summe von 40 als 60 angezeigt - da es die Stimmen nicht gruppiert. Danke! –

1

Sie könnten so etwas wie:

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

danke! Was ist der Zweck der Auswahl der Anzahl von ID (d. h. COUNT (id))? –

+0

MAX sollte SUM sein, und Sie sollten auch die item_id – Zed

+0

Ich habe Ihre ursprüngliche Frage falsch gelesen denken, dass "Anzahl der Stimmen" war ein Tiebreaker, wenn die "SUMME" das gleiche war. Wenn die Anzahl der Stimmen irrelevant ist, dient das "COUNT" in dieser Abfrage nicht dazu. – VoteyDisciple