设为首页 加入收藏

TOP

SQL高级查询(二)
2014-11-23 22:26:50 来源: 作者: 【 】 浏览:20
Tags:SQL 高级 查询
显示: 学生ID,,数据库,企业管理,英语,有效课程数,有效平均分
SELECT sid as 学生ID,

(SELECT grade FROM t_score WHERE sid=t.sid AND cid='004') AS 数据库,

(SELECT grade FROM t_score WHERE sid=t.sid AND cid='001') AS 企业管理,

(SELECT grade FROM t_score WHERE sid=t.sid AND cid='006') AS 英语,

COUNT(*) AS 有效课程数,

AVG(t.grade ) AS 平均成绩

FROM t_score AS t

GROUP BY sid

ORDER BY avg(t.grade )
18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分
SELECT t1.cid As 课程ID,t1.grade AS 最高分,t2.grade AS 最低分

FROM t_score t1 , t_score t2

WHERE t1.cid = t2.cid

and t1.grade = (

SELECT MAX(tt1.grade ) FROM t_score tt1,t_student tt2

WHERE t1.cid = tt1.cid and tt2.sid = tt1.sid

GROUP BY tt1.cid

)

AND t2.grade = (

SELECT MIN(tt3.grade ) FROM t_score AS tt3

WHERE t2.cid = tt3.cid GROUP BY tt2.cid

);
19、按各科平均成绩从低到高和及格率的百分数从高到低顺序
SELECT t.cid AS 课程号,max(course.cname)AS 课程名,isnull(AVG(grade ),0) AS 平均成绩 ,

100 * SUM(CASE WHEN isnull(grade ,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分数

FROM t_score t1,t_course t2

where t1.cid = t2.cid

GROUP BY t1.cid

ORDER BY 100 * SUM(CASE WHEN isnull(grade ,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) DESC
20、查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(001),马克思(002),OO&UML (003),数据库(004)
SELECT

SUM(

CASE WHEN cid = '001'

THEN grade ELSE 0 END)/SUM(CASE cid WHEN '001'

THEN 1 ELSE 0 END

) AS 企业管理平均分 ,

100 * SUM(

CASE WHEN cid = '001' AND grade >= 60

THEN 1 ELSE 0 END)/SUM(CASE WHEN cid = '001'

THEN 1 ELSE 0 END

) AS 企业管理及格百分数 FROM t_score
21、查询不同老师所教不同课程平均分从高到低显示
SELECT max(t3.tid) AS 教师ID,MAX(t3.tname) AS 教师姓名,

T2.cid AS 课程ID,MAX(t2.cname) AS 课程名称,AVG(grade ) AS 平均成绩

FROM t_score AS t1,t_course AS t2 ,t_teacher AS t3

where t1.cid = t2.cid and t2.tid = t3.tid

GROUP BY t2.cid

ORDER BY AVG(grade ) DESC ;
22、查询如下课程成绩第 3 名到第 6 名的学生成绩单:企业管理(001),马克思(002),UML (003),数据库(004)
[学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩
SELECT DISTINCT top 3 t_score.sid As 学生学号,Student.Sname AS 学生姓名 ,

T1.grade AS 企业管理, T2.grade AS 马克思, T3.grade AS UML,

T4.grade AS 数据库,ISNULL(T1.grade ,0) + ISNULL(T2.grade ,0) + ISNULL(T3.grade ,0) + ISNULL(T4.grade ,0) as 总分

FROM Student, t_score

LEFT JOIN t_score AS T1

ON t_score.sid = T1.sid AND T1.cid = '001'

LEFT JOIN t_score AS T2

ON t_score.sid = T2.sid AND T2.cid = '002'

LEFT JOIN t_score AS T3

ON t_score.sid = T3.sid AND T3.cid = '003'

LEFT JOIN t_score AS T4

ON t_score.sid = T4.sid AND T4.cid = '004'

WHERE student.sid= t_score.sid

and ISNULL(T1.grade ,0) + ISNULL(T2.grade ,0) + ISNULL(T3.grade ,0) + ISNULL(T4.grade ,0)

NOT IN (

SELECT DISTINCT TOP 15 WITH TIES ISNULL(T1.grade ,0) + ISNULL(T2.grade ,0) + ISNULL(T3.grade ,0) + ISNULL(T4.grade ,0)

FROM t_score

LEFT JOIN t_score AS T1

ON t_score.sid = T1.sid AND T1.cid = 'k1'

LEFT JOIN t_score AS T2

ON t_score.sid = T2.sid AND T2.cid = 'k2'

LEFT JOIN t_score AS T3

ON t_score.sid = T3.sid AND T3.cid = 'k3'

LEFT JOIN t_score AS T4

ON t_score.sid = T4.sid AND T4.cid = 'k4'

ORDER BY ISNULL(T1.grade ,0) + ISNULL(T2.grade ,0) + ISNULL(T3.grade ,0) + ISNULL(T4.grade ,0) DE t_score

);

23、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]
SELECT t1.cid as 课程ID, t2.cname as 课程名称,

SUM(CASE WHEN t1.grade BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85],

SUM(CASE WHEN t1.grade BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70],

SUM(CASE WHEN t1.grade BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60],

SUM(CASE WHEN t1.grade < 60 THEN 1 ELSE 0 END) AS [60 -]

FROM t_score t1,t_course t2 where t1.cid = t2.cid

GROUP BY t1.cid,t2.cname;

24、查询学生平均成绩及其名次
SELECT

1+(

SELECT COUNT( distinct avggrade )

FROM (

SELECT sid,AVG(grade ) AS avggrade FROM t_score GROUP BY sid

) AS T1 WHERE avggra

首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇SQLServer中的事务和锁 下一篇SQLServerDBA调优日记(一)――..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: