首先創建表:
CREATE TABLE score_t(
name VARCHAR(10), subject VARCHAR(10), score INT(10) );
插入數據:
INSERT INTO score_t VALUES ("張三","java",71), ("李四","java",82), ("王五","java",90), ("趙六","java",98), ("孫七","java",90), ("張三","python",81), ("李四","python",92), ("王五","python",93), ("趙六","python",97), ("孫七","python",70);
思路:
這里只需要先將T2表數據按科目和分數,去重,再查找滿足比它分數高的記錄數 < 3 的數據即可。
查詢各科成績前三名,前三名都有一個特點,比他們成績高的人數小於3,成績就是前三名。
正確寫法:

另一種寫法:用了limit
select aa.* from ( select DISTINCT name as n1, ( select sum(mark) from te where name=n1 )as g from te t ) aa where aa.g in ( select ta.grade as g from ( select (select sum(mark) from te where name=t1.name )as grade from te t1 GROUP BY grade desc LIMIT 3 ) as ta )
摘自:https://blog.csdn.net/weixin_44497013/article/details/107317719