2016-11-06 11 views
1

Ich benutze die folgende Abfrage, um eine Liste der Benutzer mit maximaler 'Geschwindigkeit' zu erhalten.Wie 'GROUPT BY' nach 'ORDER BY' in MySQL

Mit Gruppe von:

SELECT users.email, speed.speed 
    FROM users INNER JOIN speed ON users.email=speed.email 
    GROUP BY users.email 
    ORDER BY speed.speed DESC LIMIT 15 

enter image description here

Wie auch immer die Abfrage ausgeführt wird, die 'ORDER BY' funktioniert nicht. Es zeigt immer das Ergebnis in der Spitze.

Wenn ich "GROUP BY" entferne, habe ich die Bestellliste. Aber ich möchte nur 1 Zeile mit den gleichen E-Mail-IDs. Wie kann ich hier eine Gruppe anwenden?

Ohne Gruppierung:

SELECT users.email, speed.speed 
    FROM users INNER JOIN speed ON users.email=speed.email 
    ORDER BY speed.speed DESC LIMIT 15 

enter image description here

Antwort

2

Ohne eine Aggregatfunktion, GROUP BY finden Sie die gruppierte Spalte zeigen mit je nachdem welcher Wert zuletzt von nicht-gruppierten Spalten ausgewählt ist. Sie sollten eine Aggregatfunktion in Ihrer speed.speed-Spalte verwenden, wenn Sie sie sortieren möchten.

Wenn Sie jeden Benutzer mit ihrer Höchstgeschwindigkeit möchten, müssen Sie so etwas wie

SELECT users.email, MAX(speed.speed) FROM users INNER JOIN speed ON users.email=speed.email ORDER BY speed.speed DESC LIMIT 15

machen wollen oder wenn Sie wollten die minimale

SELECT users.email, MIN(speed.speed) FROM users INNER JOIN speed ON users.email=speed.email ORDER BY speed.speed DESC LIMIT 15

oder beide

SELECT users.email, MAX(speed.speed) as maxspeed, MIN(speed.speed) as minspeed FROM users INNER JOIN speed ON users.email=speed.email ORDER BY speed.speed DESC LIMIT 15

1

Wenn Sie nur die 15 höchsten Geschwindigkeiten:

SELECT s.email, s.speed 
FROM speed s 
ORDER BY s.speed DESC 
LIMIT 15; 

Wenn Sie die Benutzer mit der höchsten Geschwindigkeit wollen:

SELECT s.email, s.speed 
FROM speed s 
WHERE s.speed = (SELECT MAX(s2.speed) FROM speed s2) 
LIMIT 15; 

Beachten Sie, dass für diese Abfragen benötigt werden, nicht beitritt.