3 Stimmen

Das Finden des Datensatzes mit dem maximalen Wert in SQL

Ich habe die folgende Tabelle:

Klasse, Name, Punktzahl
1, Anna, 34
1, Andy, 80
2, Brooke, 90
2, Brad, 70
3, Charles, 67
3, Christina, 66

Wie finde ich den 'Namen' mit der höchsten 'Punktzahl' in jeder 'Klasse'?

Erforderliche Ausgabe:

Klasse, Name, Punktzahl
1, Andy, 80
2, Brooke, 90
3, Charles, 67

Dies ist für MySQL.

4voto

Jonathan Leffler Punkte 694013
MIT ClassScores ALS
(
    AUSWÄHLEN 1 ALS klasse, 'Anna' ALS Name, 34 ALS Punktzahl 
    UNION
    WÄHLEN 1, 'Andy', 80  
    UNION
    WÄHLEN 2, 'Brooke', 90  
    UNION
    WÄHLEN 2, 'Brad', 70  
    UNION
    WÄHLEN 3, 'Charles', 67  
    UNION
    WÄHLEN 3, 'Christina', 66 
)

AUSWÄHLEN C1.Klasse, C1.Name, C1.Punktzahl
  VON ClassScores ALS C1
  INNER JOIN (AUSWÄHLEN Klasse, MAX(Punktzahl) ALS MaxScore
          VON ClassScores
         GRUPPE NACH Klasse
       ) ALS C2
    AN C1.Klasse = C2.Klasse
   UND C1.Punktzahl = C2.MaxScore
 BESTELLEN DURCH C1.Klasse;

1voto

ypercubeᵀᴹ Punkte 109378

Ein weiterer Weg - wenn ClassScores einen (versteckten) PRIMARY KEY hat:

SELECT 
    cs.Class
  , cs.Name
  , cs.Score
FROM 
      ( SELECT DISTINCT Class 
        FROM ClassScores 
      ) AS csd
  JOIN 
      ClassScores AS cs
    ON cs.PK = 
       ( SELECT csm.PK
         FROM ClassScores csm
         WHERE csm.Class = csd.Class
         ORDER BY csm.Score DESC
         LIMIT 1
       )

0voto

MorganP Punkte 13

Verwenden Sie UNION und dann können Sie drei SELECT-Anweisungen einzeln verwenden. Dadurch wird der Code schön aufgeräumt.

Versuch es..

select class, name, max(score) as "Score" from yourTable where class=1
UNION
select class, name, max(score) as "Score" from yourTable where class=2
UNION
select class,name,max(score) as "Score" from yourTable where class=3

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X