Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Rückgabe eines Min() und eines anderen Felds?

Die Sache ist folgende:Jede Aggregatfunktion "kümmert sich nicht" um den Rest ihrer Zeile. Wenn es nicht MIN, sondern SUM war, ist es leichter zu sehen...

Die Lösung ist etwas knifflig, Sie sollten etwas tun, das LEFT JOIN mit einer Ungleichung beinhaltet:

SELECT u.username, l.timer AS intScore, l.hashtag

FROM
 leaderboard l
 INNER JOIN users u ON u.users_id = l.users_id
 LEFT JOIN leaderboard l2 ON l.users_id = l2.users_id AND l2.timer < l.timer
WHERE
 l2. users_id IS NULL
ORDER BY intScore ASC

Die Idee besteht darin, den niedrigsten Wert zu erhalten, indem die MIN-Funktion übersprungen und die gesamte Zeile abgerufen wird

Das Filtern nach Datum (oder einer anderen Spalte/Kriterien für diese Angelegenheit) aus der Leaderboard-Tabelle erfordert, dass wir jede Tabelle filtern, die wir verwenden. P>

SET @date0 = '2018-01-01';
SELECT u.username, l.timer AS intScore, l.hashtag

FROM
 leaderboard l
 INNER JOIN users u ON u.users_id = l.users_id
 LEFT JOIN leaderboard l2 ON l.users_id = l2.users_id AND l2.timer < l.timer AND l2.game_date >= @date0
WHERE
 l.game_date >= @date0
 l2.users_id IS NULL
ORDER BY intScore ASC

hoffe es hilft