牛客网-SQL专项训练8
①在SQL中用条件表示价格在在30至40之间,应该如何表达(B)
解析:IN 与BETWEEN AND的区分 (数字型)

解析:
创建视图的语法: create view 视图名 as select * from 表名 where 条件
ACD:要么缺少筛选条件,要么语法错误
③在MySQL中,现有评分表evaluate(包含班级编号cid和分数point字段),有班级表grade(包含班级编号cid等字段), 查询evaluate 表中有没有班级均分大于等于80分的,如果存在,则查询显示grade表按cid由大到小排名的前五行记录,SQL语句是()
分析:
1.需要显示的字段:grade中的所有信息
2.需要查询的表:grade
3.进行查询
先从表evaluate中计算point的平均分大于等于80的记录
select cid AVG(point) as avg
from evaluate
group by cid
having avg >= 80;
然后从筛选出的表中按cid从大到小降序排列,选出前五行的记录
select *
from grade
where exists(
slect cid AVG(point) as avg
from evaluate
group by cid
having avg >= 80
)
order by grade.cid desc
limit 5;
注意:group by 后面可以使用别名
④Mysql中表student_table(id,name,birth,sex),id字段值可能重复,分别查询男生、女生的不重复id总数,如下SQL正确的是(B)?
A:如果是男就为1,否则为null,然后再对1去重,就只会有一个1,sum()最终结果就只有一个1,女生也同样如此,不符合题意。
C:与A情况一样,如果是男就为1,否则为null,然后再对1去重,就只会有一个1,count()最终就只有一条记录,count()为1,不符合题意。
D:distinct需要写在case前面
B:如果是男就显示它的id,否则为null,然后再对id去重,就只会留下不重复的id,count()最终结果就是不重复的id数。
注意:sum(),max(),avg(),min(),count()都是忽略nul的
⑤已知grade表如下,要求找出分数重复的数据,SQL语句是:
分析:
先统计每个mark的数量,并mark进行分组
select mark count(mark) as nums
from grade
group by mark;
再找出mark数量大于1的分数:
select mark
from(
select mark count(mark) as nums
from grade
group by mark
) as temp
where nums > 1
注意:
- 创建临时表的时候记得起表名;
- where子句不能与聚合函数一起使用;
- where 、group by、 having 的执行顺序是 先where 再group by 再having。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)