id      name    course  score
1 李四 数学 90
2 李四 语言 80
3 张三 数学 70
4 张三 语言 56有这样一个数据 要实现的 功能是 查出每个学生每门 课程大于60的信息
其结果 应该是 李四二门,张三一门,这SQL要怎么写呢,求高手指点

解决方案 »

  1.   

    --如果是查所有信息,则:
    select * from tb where score>=60
    --如果要查统计信息,则:
    select name,count(*) from tb where score>=60 group by name
      

  2.   


    select name,sum(case when score>=60 then 1 else 0 end) cnt
    from tb
    group by name
      

  3.   


    select name,count(1) from tb 
    where score>=60 
    group by name
      

  4.   

    谢谢楼上的,如果是没有条件只需要根据这些结果动态加一列 如果>=60 显示合适,否则不合格,
    怎么用 case when then  写呢 比如结果这样1 李四 数学 90 合格
    2 李四 语言 80 合格
    3 张三 数学 70 合格
    4 张三 语言 56 不合格
      

  5.   


    select *,(case when score>=60 then '合格' else '不合格' end) flag
    from tb
      

  6.   


    --创建测试表
    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--结果
      

  7.   

    select *,state=case when score>=60 then '合格' else '不合格' end from table