sql >> Databasteknik >  >> RDS >> Mysql

Returnerar en Min() och ett annat fält?

Saken är den här:alla aggregerade funktioner "bryr sig inte" om resten av sin rad Om det inte var MIN utan SUM, är det lättare att se...

Lösningen är lite knepig, du borde göra något som innebär LEFT JOIN med en ojämlikhet :

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

Tanken är att få lägsta värde genom att hoppa över MIN-funktionen och få hela raden

Filtrering efter datum (eller någon annan kolumn/kriterier för den delen) från leaderboard-tabellen kommer att kräva att vi filtrerar varje tabell vi använder. Det är viktigt att filtrera tabellen LEFT JOINed vid PÅ-läget, annars eliminerar vi filtreringseffekten NULL:

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

hoppas det hjälper




  1. PostgreSQL - pg_config -bash:pg_config:kommandot hittades inte

  2. SQLite - Välj Data

  3. SQL Server-tabell skapande datum fråga

  4. MYSQL:Får du befintlig primärnyckel när du infogar post med dubblett av unik nyckel?