今天有同事說到了怎么MySQL中查詢獲取每個班級成績前三名的學生信息,在網上查了查,然后寫出代碼,很快就OK了。
CREATE TABLE t_testscore( pk_id INT PRIMARY KEY, c_name VARCHAR(50) , c_score INT, c_class INT )DEFAULT CHARSET=utf8;
INSERT INTO t_testscore VALUES (1, '張三6', 66, 1),(2, '張三5', 65, 1),(3, '張三4', 64, 1), (4, '張三3', 63, 1),(5, '張三2', 62, 1);
INSERT INTO t_testscore VALUES (11, '李四6', 76, 2),(12, '李四5', 75, 2),(13, '李四4', 74, 2), (14, '李四3', 73, 2),(15, '李四2', 72, 2);
SELECT * FROM t_testscore t
WHERE EXISTS(SELECT COUNT(*) FROM t_testscore ts WHERE ts.c_score>=t.c_score and ts.c_class=t.c_class GROUP BY ts.c_class HAVING COUNT(*)<=3)
ORDER BY c_class,c_score DESC;
ps: 當年寫這個代碼沒有詳細研究,只是解決了當時的基本問題,謝謝 liuchao2472 朋友的提醒,我又重新修改了代碼,紅色加粗的部分是新增的,這樣應該就OK了!!