目录
题目
本题目要求编写SQL语句,
统计出``sc```表中不及格人数超过3人的课程号和人数,要求结果中列名分别显示“课程号”、“不及格人数”。
提示:请使用SELECT语句作答。
表结构:
请在这里写定义表结构的SQL语句。例如:
CREATE TABLE sc (
sno char(7) ,
cno char(7) ,
score decimal(4,1),
point decimal(2,1),
PRIMARY KEY (sno,cno)
) ;
表样例
请在这里给出上述表结构对应的表样例。例如
sc
表:
sno | cno | score | point |
1711202 | 0000011 | 53.0 | 0.0 |
1711202 | 0000027 | 38.0 | 1.0 |
1911201 | 0000027 | 44.0 | 1.0 |
1911201 | 0000052 | 71.0 | 2.0 |
1911211 | 0000027 | 51.0 | 1.0 |
1911211 | 0000052 | 71.0 | 2.0 |
1911215 | 0000027 | 58.0 | 1.0 |
输出样例:
请在这里给出输出样例。例如:
课程号 | 不及格人数 |
0000027 | 4 |
答案
SELECT cno 课程号,COUNT(score) 不及格人数
FROM sc WHERE score<60.0
GROUP BY cno
HAVING COUNT(score) >3;
过程
CREATE DATABASE PTA;
USE PTA;
CREATE TABLE FRISTSEVEN (
sno char(7) ,
cno char(7) ,
score decimal(4,1),
point decimal(2,1),
PRIMARY KEY (sno,cno)
) ;
#对于声明语法DECIMAL(M,D),自变量的值范围如下:
#M是最大位数(精度),范围是1到65。可不指定,默认值是10。
#D是小数点右边的位数(小数位)。范围是0到30,并且不能大于M,可不指定,默认值是0。
INSERT INTO FRISTSEVEN VALUES
('1711202','0000011',53.0,0.0),
('1711202','0000027',38.0,1.0),
('1911201','0000027',44.0,1.0),
('1911201','0000052',71.0,2.0),
('1911211','0000027',51.0,1.0),
('1911211','0000052',71.0,2.0),
('1911215','0000027',58.0,1.0);
SELECT * FROM FRISTSEVEN;
SELECT cno ,COUNT(sno) FROM FRISTSEVEN GROUP BY cno;
SELECT cno c ,COUNT(sno) FROM FRISTSEVEN
WHERE score<60 GROUP BY c;
SELECT COUNT(sno) FROM FRISTSEVEN;
SELECT COUNT(sno) FROM FRISTSEVEN WHERE score<60;
SELECT cno 课程号,COUNT(sno) 不及格人数
FROM FRISTSEVEN
WHERE score<60
GROUP BY cno
HAVING 不及格人数>3
ORDER BY cno DESC ;
SELECT cno,score FROM FRISTSEVEN WHERE score<60;
#SELECT cno,score 成绩 FROM FRISTSEVEN WHERE 成绩<60;#报错先执行WHERE再执行cno,score 成绩;
SELECT cno,score 成绩 FROM FRISTSEVEN s WHERE s.score<60;
#一般不支持在select中继续使用别名 或者where语句中使用,但是在orderby groupby 可以使用
#虽然GROUP BY执行顺序在SELECT前面
#from-->where-->group by -->having --- >select --> order