sql >> Databáze >  >> RDS >> Mysql

Vrátíte Min() a další pole?

Jde o to, že jakákoli agregační funkce se „nestará“ o zbytek svého řádku. Pokud to nebylo MIN, ale SUM, je to lépe vidět...

Řešení je trochu složitější, měli byste udělat něco, co zahrnuje LEFT JOIN s nerovností:

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

Cílem je získat nejnižší hodnotu přeskočením funkce MIN a získáním celého řádku

Filtrování podle data (nebo jakéhokoli jiného sloupce / kritéria) z tabulky výsledkové tabulky po nás bude vyžadovat filtrování každé tabulky, kterou používáme. Je důležité filtrovat tabulku LEFT JOINed ve stavu ON, jinak eliminujeme efekt filtrování 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

doufám, že to pomůže




  1. Vytvořte novou tabulku výběrem dat z jiných tabulek pomocí CREATE TABLE AS

  2. Získávání XML z pěti různých tabulek Oracle

  3. Záloha SQL Server 2017 -1

  4. Laravel - doplňte chybějící data a počty z databáze