Mysql
 sql >> Baza danych >  >> RDS >> Mysql

mysql SELECT najlepsze z każdej kategorii w jednej tabeli

Spróbuj tego:

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;

To wygeneruje:

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

Inną opcją, którą możesz zrobić, jest utworzenie tymczasowej tabeli lub widoku (jeśli nie lubisz podzapytania).

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

Następnie:

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;

LUB widok:

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

Następnie:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak usunąć początkowe i końcowe białe znaki w polu MySQL?

  2. mysqldump całą strukturę, ale tylko dane z wybranych tabel w jednym poleceniu

  3. Jak sprawić, by funkcja SUM w MySQL zwróciła „0”, jeśli nie znaleziono żadnych wartości?

  4. Nie można połączyć się z serwerem bazy danych (środowiskiem roboczym mysql)

  5. Railsy:Wymuś pusty ciąg na NULL w bazie danych