sql >> Database >  >> RDS >> Mysql

Een Min() en een ander veld retourneren?

Het punt is dit:elke geaggregeerde functie "geeft niets om" de rest van zijn regel Als het niet MIN maar SUM was, is het gemakkelijker te zien...

De oplossing is een beetje lastig, je zou iets moeten doen waarbij LEFT JOIN een ongelijkheid inhoudt:

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

Het idee is om de laagste waarde te krijgen door de MIN-functie over te slaan en de hele rij te krijgen

Filteren op datum (of een andere kolom / criteria voor die kwestie) van de leaderboard-tabel, vereist dat we elke tabel die we gebruiken filteren. Het is belangrijk om de LEFT JOINed-tabel te filteren op de ON-voorwaarde, anders elimineren we het filterende NULL-effect:

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

hoop dat het helpt




  1. MySQL GeoSpatial-gegevenstypen gebruiken in .NET

  2. Kan tabel niet wijzigen, krijg fout 1067 Ongeldige standaardwaarde

  3. Basisprincipes van sys.dm_exec_requests

  4. oracle hoe de tabel te wijzigen partitie toevoegen per bereikinterval