Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

mysql CHỌN tốt nhất của từng danh mục trong một bảng duy nhất

Hãy thử điều này:

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;

Điều này sẽ xuất ra:

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

Tùy chọn khác mà bạn có thể làm là tạo một bảng tạm thời hoặc một dạng xem (nếu bạn không thích truy vấn phụ).

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

Sau đó:

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;

HOẶC một lượt xem:

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

Sau đó:

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. Làm thế nào để sắp xếp theo ngày trước trong cơ sở dữ liệu?

  2. PDO gửi truy vấn thô tới MySQL trong khi Mysqli gửi truy vấn đã chuẩn bị sẵn, cả hai đều tạo ra cùng một kết quả

  3. lỗi khi đọc bảng thành viên asp.net trong MySQL

  4. Hiệu suất MySQL của trường varchar duy nhất so với bigint duy nhất

  5. PHP Openssl giải mã một Mã hóa AES Mysql