2016-03-25 6 views
0

Ich arbeite an einem Projekt, wo ich die Lösungen mit den höchsten Stimmen pro Problem auflisten muss.SQL SELECT Zeile mit dem höchsten Wert wo Problem_ID ist gleich

Jedes Problem hat zwei Lösungen und die Benutzer können über eine Lösung pro Problem abstimmen. Dies ist meine Datenbank im Moment.

+----------+------------+---------+ 
| id | id_problem | vote | 
+----------+------------+---------+ 
| 1  |  1  | 25 | 
| 2  |  1  | 10 | 
| 3  |  2  | 18 | 
| 4  |  2  | 2 | 
| 5  |  3  | 6 | 
| 6  |  3  | 7 | 
| 7  |  4  | 11 | 
| 8  |  4  | 4 | 
| 9  |  5  | 5 | 
| 10 |  5  | 2 | 
+----------+------------+---------+ 

Ich möchte dieses Ergebnis erhalten: (Die Zeile mit der höchsten Stimme pro id_problem)

+----------+------------+---------+ 
| id | id_problem | vote | 
+----------+------------+---------+ 
| 1  |  1  | 25 | 
| 3  |  2  | 18 | 
| 6  |  3  | 7 | 
| 7  |  4  | 11 | 
| 9  |  5  | 5 | 
+----------+------------+---------+ 

Antwort

0
SELECT 
    id, 
    id_problem, 
    max(vote) 
from 
    tablename 
group by 
    id_problem 
order by 
    id_problem ASC 

Die max (Abstimmung) größer Abstimmung bestimmt, aber es das Ergebnis aggregieren, dann müssen Sie durch id_problem gruppieren und dann asc bestellen.

0

Sie group by Klausel mit max Aggregationsfunktion verwenden kann, das erwartete Ergebnis zu erhalten, zum Beispiel:

select id, id_problem, max(vote) as vote 
from result 
group by id_problem 
order by id_problem 

Hier SQL Fiddle .

+0

Ich bin mir nicht sicher, ob er ID auch will, da es die PK ist. – bassxzero

+0

Bearbeitet die Antwort .. –