id name course score
1 李四 数学 90
2 李四 语言 80
3 张三 数学 70
4 张三 语言 56有这样一个数据 要实现的 功能是 查出每个学生每门 课程大于60的信息
其结果 应该是 李四二门,张三一门,这SQL要怎么写呢,求高手指点
1 李四 数学 90
2 李四 语言 80
3 张三 数学 70
4 张三 语言 56有这样一个数据 要实现的 功能是 查出每个学生每门 课程大于60的信息
其结果 应该是 李四二门,张三一门,这SQL要怎么写呢,求高手指点
select * from tb where score>=60
--如果要查统计信息,则:
select name,count(*) from tb where score>=60 group by name
select name,sum(case when score>=60 then 1 else 0 end) cnt
from tb
group by name
select name,count(1) from tb
where score>=60
group by name
怎么用 case when then 写呢 比如结果这样1 李四 数学 90 合格
2 李四 语言 80 合格
3 张三 数学 70 合格
4 张三 语言 56 不合格
select *,(case when score>=60 then '合格' else '不合格' end) flag
from tb
--创建测试表
CREATE TABLE #T
(
id int,
name varchar(20),
course varchar(20),
score int
)--添加测试数据
INSERT INTO #T
SELECT 1,'李四','数学',90 UNION ALL
SELECT 1,'李四','语文',80 UNION ALL
SELECT 1,'张三','数学',70 UNION ALL
SELECT 1,'张三','语文',56
--SQL语句
SELECT name,count(*) as total FROM
(SELECT * FROM #T WHERE score>60) A --先查课程大于60分的分部记录
GROUP BY name--删除测试表
DROP TABLE #T--结果