有一数据库:
科目 姓名 分数语文 张三 80
语文 李四 75
语文 王五 85
语文 赵六 90
数学 张三 100
数学 李四 90
数学 王五 60
数学 赵六 75
英语 张三 80
英语 李四 85
英语 王五 60
英语 赵六 70怎么样用一SQL语句得到每科目分数前三名的记录?
科目 姓名 分数语文 张三 80
语文 李四 75
语文 王五 85
语文 赵六 90
数学 张三 100
数学 李四 90
数学 王五 60
数学 赵六 75
英语 张三 80
英语 李四 85
英语 王五 60
英语 赵六 70怎么样用一SQL语句得到每科目分数前三名的记录?
INSERT T1 SELECT '语文','张三',80
UNION ALL SELECT '语文','李四',75
UNION ALL SELECT '语文','王五',85
UNION ALL SELECT '语文','赵六',90
UNION ALL SELECT '数学','张三',100
UNION ALL SELECT '数学','李四',90
UNION ALL SELECT '数学','王五',60
UNION ALL SELECT '数学','赵六',75
UNION ALL SELECT '英语','张三',80
UNION ALL SELECT '英语','李四',85
UNION ALL SELECT '英语','王五',60
UNION ALL SELECT '英语','赵六',70SELECT *,IDENTITY(INT,1,1) AS ID INTO # FROM T1SELECT * FROM # A
WHERE ID IN
(SELECT TOP 3 ID FROM # WHERE SUBJECT=A.SUBJECT ORDER BY SCORE DESC)
不用临时表
CREATE TABLE T1(SUBJECT VARCHAR(10),NAME VARCHAR(10),SCORE INT)
INSERT T1 SELECT '语文','张三',80
UNION ALL SELECT '语文','李四',75
UNION ALL SELECT '语文','王五',85
UNION ALL SELECT '语文','赵六',90
UNION ALL SELECT '数学','张三',100
UNION ALL SELECT '数学','李四',90
UNION ALL SELECT '数学','王五',60
UNION ALL SELECT '数学','赵六',75
UNION ALL SELECT '英语','张三',80
UNION ALL SELECT '英语','李四',85
UNION ALL SELECT '英语','王五',60
UNION ALL SELECT '英语','赵六',70
Select * From T1 A Where (Select Count(*) From T1 Where SUBJECT=A.SUBJECT And SCORE<A.SCORE)<3
方法三:
不用临时表:
Select * From T1 A Where Not Exists (Select 1 From T1 Where SUBJECT=A.SUBJECT And SCORE<A.SCORE Having Count(*)>2)