sql >> Database teknologi >  >> RDS >> Mysql

mysql VÆLG bedst af hver kategori i en enkelt tabel

Prøv dette:

SELECT gamers.*
FROM gamers
INNER JOIN 
 (SELECT 
   max(score) as maxscore, 
   gameid from gamers
   GROUP BY gameid) AS b
ON (b.gameid = gamers.gameid AND b.maxscore=gamers.score) ;
ORDER BY score DESC, gameid;
 

Dette vil udsende:

+---------+--------+-------+ | gamerid | gameid | score | +---------+--------+-------+ | 4 | 1 | 90 | | 5 | 2 | 40 | | 8 | 3 | 30 | +---------+--------+-------+ 3 rows in set (0.00 sec)

Den anden mulighed, du kan gøre, er at oprette en midlertidig tabel eller en visning (hvis du ikke kan lide underforespørgsel).

create temporary table games_score (
 SELECT max(score) as maxscore, gameid FROM gamers GROUP BY gameid
);
 

Så:

SELECT gamers.* 
FROM gamers 
INNER JOIN games_score AS b ON (b.gameid = gamers.gameid AND b.maxscore=gamers.score) 
ORDER BY score DESC, gameid;
 

ELLER en visning:

create or replace view games_score AS 
SELECT max(score) as maxscore, gameid FROM gamers GROUP BY gameid;
 

Så:

SELECT gamers.* 
FROM gamers 
INNER JOIN games_score AS b ON (b.gameid = gamers.gameid AND b.maxscore=gamers.score) 
ORDER BY score DESC, gameid;
 


  1. Tilføjelse af flere parameteriserede variabler til en database i c#

  2. Vælg, hvor JSON Array indeholder

  3. opfylder den nødvendige mængde ved hjælp af mysql

  4. Sådan ændres lokalitet, når du formaterer tal i PostgreSQL