【sql 练习题 36,37】查询每门功成绩最好的前两名,统计每门课程的学生选修人数(超过 5 人的课程才统计)

题目36:查询每门功成绩最好的前两名

分析:先用自己交自己,条件为a.courseid = b.courseid and a.score<b.score,其实就是列出同一门课内所有分数比较的情况。

通过a.studentid和a.courseid可以联合确定这个同学的这门课的这个分数究竟比多少个其他记录高/低,

如果这个特定的a.studentid和a.courseid组合出现在这张表里的次数少于2个,那就意味着这个组合(学号+课号+分数)是这门课里排名前二的。

所以下面这个计算中having count 部分其实count()或者任意其他列都可以,这里制定了一个列只是因为比count()运行速度上更快。

select a.studentid,a.courseid,a.score from student_score as a
left join student_score as b
on a.courseid = b.courseid and a.score<b.score
group by a.courseid, a.studentid
having count(b.courseid)<2
order by a.courseid;

题目37:.统计每门课程的学生选修人数(超过 5 人的课程才统计)

分析:这题目的思路已经写过很多次了  group by courseid count(student)

SELECT courseid, COUNT(studentid) FROM student_score GROUP BY courseid HAVING COUNT(studentid)>5

原文地址:https://www.cnblogs.com/yuanyuan2017/p/11378194.html

时间: 2024-08-24 23:53:49

【sql 练习题 36,37】查询每门功成绩最好的前两名,统计每门课程的学生选修人数(超过 5 人的课程才统计)的相关文章

SQL删除重复行和查询所有大于某成绩的语句分析

有这样一个题,用一条SQL语句 查询出每门课都大于80分的学生姓名. 下面是表 分析,查询每门课程都大于80的学生.SELECT DISTINCT name FROM dbo.student WHERE fenshu<=80查询出来的结果是李四王五张三都有. 小于等于80的语句SELECT name FROM dbo.student WHERE fenshu<=80 只有张三一个. 这个是重复的,值得利用,用not in(不在次语句中的)语句将两句拼写到一块如下: SELECT DISTINC

查处每门功课前两名学生的名字,课程名,成绩

Table: Student(Sno,Sname,Sage,Ssex)Course(Cno,Cname,Teacher)SC(Sno,Cno,Grade) SQL: SELECT S.Sname ,C.Cname,D.GradeFROM Student S,Course C,( --这部分是关键: SELECT * FROM dbo.SC SCA WHERE grade IN ( SELECT DISTINCT TOP 2 grade FROM SC WHERE SCA.Cno=Cno ORDE

python学习--练习题6、7、8--九九乘法表,前两项相加问题,素数输出问题

练习6 #输出9*9乘法表 s=(i*n for i in range(1,10) for n in range(1,10)) print(list(s)) 练习7 #题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 一共经历了几个月=int(input("几月:")) def 多少只兔子(): s=[1,1] for i in range(0,一共经历了几个月+1): t=s[i+1]

sql 经典四表查询

题 目 : student(sid, sname, sage, ssex) -- 学生信息表(学生编号 自增,学生姓名, 学生出生年月, 性别): teacher(tid, tname) -- 教师信息表(教师编号 自增, 教师姓名) course(cid, cname, tid) -- 课程表(课程编号 自增, 课程名称, 教师编号 外键) sc(sid, cid, score) --  分数表(学生编号,课程编号,分数) create database work; use work;set

50道sql练习题和答案

最近两年的工作没有写过多少SQL,感觉水平下降十分严重,网上找了50道练习题学习和复习 原文地址:50道SQL练习题及答案与详细分析 1.0数据表介绍 --1.学生表 Student(SId,Sname,Sage,Ssex) --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表 Course(CId,Cname,TId) --CId 课程编号,Cname 课程名称,TId 教师编号 --3.教师表 Teacher(TId,Tname) --TId 教

接近50道经典SQL练习题,附建表SQL解题SQL

说明 本文章整理了47道常见sql联系题,包括建表语句,表结构,习题列表,解题答案都涵盖在本文章内.文末提供了所用SQL脚本下载链接.所有解题答案都是本人自己写的,广大读者如果在阅读使用中,有任何问题欢迎留言,对我写的有问题的,欢迎指正,谢谢. 数据库:oracle11g 表结构 可使用plsql-工具-导入表,导入如下sql脚本. 表结构与数据.sql 学生表 Student(SId,Sname,Sage,Ssex)SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别

SQL Server 50道查询训练题,学生Student表

下面这个是题目所用到的数据库! 首先你需要在你的SQL Sever数据库中创建[TestDb]这个数据库,接下来下面这个代码.直接复制在数据库里运行就好了! 1 USE [TestDb] 2 GO 3 /****** Object: Table [dbo].[Course] Script Date: 2018/4/28 17:36:10 ******/ 4 SET ANSI_NULLS ON 5 GO 6 SET QUOTED_IDENTIFIER ON 7 GO 8 SET ANSI_PADD

[转] 经典SQL练习题

原题目来自qaz13177_58_CSDN博客 http://blog.csdn.net/qaz13177_58_/article/details/5575711/#sql 只是更新个人答案供参考 表结构:CREATE TABLE STUDENT(SNO VARCHAR(3) NOT NULL, SNAME VARCHAR(4) NOT NULL,SSEX VARCHAR(2) NOT NULL, SBIRTHDAY DATETIME,CLASS VARCHAR(5))goCREATE TABL

面试题,有三张表,学生表S,课程表C,学生课程表SC,学生可以选修多门课程,一门课程可能被多个学生选修,通过SC表关联。(1)写出建表以及插入语句;(2)写出SQL语句,查询选修了所有选修课程的学生;(3)写出SQL语句,查询选修了至少2门

1 CREATE TABLE student( 2 id INT PRIMARY KEY AUTO_INCREMENT, 3 stuname VARCHAR(20) NOT NULL 4 ) 5 6 7 CREATE TABLE course( 8 id INT PRIMARY KEY AUTO_INCREMENT, 9 couname VARCHAR(20) NOT NULL 10 ) 11 12 CREATE TABLE stucou 13 (sid INT REFERENCES stude