感觉挺有意思的SQL题目

时间:2021-08-28 14:48:46

1、有如下数据,要求查询每个班最低分和最高分,并将最高分与最低分显示为同一列

ID Student CourseName Score
1 张三 English 80
2 张三 Math 70
3 张三 Chinese 50
4 李四 English 90
5 李四 Chinese 70
6 王五 Math 60
7 王五 English 70
8 赵六 Chinese 80
9 赵六 Math 60
10 赵六 English 90

这是我的解决方案,如有更好的,欢迎指点:

select Student,CourseName,Score
from(
  select Student,CourseName,Score,
  rnDesc=ROW_NUMBER() over(partition by CourseName order by Score desc),--按照分数降序给个编号(如果是按照学生的话将over()中的CourseName改为

--Student 即可)
  rnAsc=ROW_NUMBER() over(partition by CourseName order by Score Asc)--按照分数升序给个编号
  from dbo.Score

)T where T.rnAsc=1 or t.rnDesc=1--取按升序的第一个和按降序的第一个即为最低分和最高分

2、如题:

ID    Numb  type

1	0001	in
2 0001 in
3 0001 out
5 0001 in
6 0002 in
7 0002 out
8 0002 in
9 0002 in
10 0003 out
11 0003 out
12 0004 in

要求查出的结果格式为:

numb    in     out
0001 3 1
0002 3 1
0003 0 2
0004 1 0

sql:

select numb,

sum(case type when 'in' then 1 else 0 end)as tIn,--统计type为"in"的数量,用sum而非count

sum(case type when 'out' then 1 else 0 end)as tOut,--统计type为"out"的数量,用sum而非count

from table1

group by numb