sql常见查询语句

简介: sql常见查询语句

1、查询每门课程都大于80的同学姓名(student)


  • 前提:创建student表插入数据:
insert into `sql`.`student` (`name`, `course`, `score`) values ('陈玲', '语文', '88');
insert into `sql`.`student` (`name`, `course`, `score`) values ('陈玲', '数学', '90');
insert into `sql`.`student` (`name`, `course`, `score`) values ('陈玲', '英语', '98');
insert into `sql`.`student` (`name`, `course`, `score`) values ('胡云峰', '语文', '78');
insert into `sql`.`student` (`name`, `course`, `score`) values ('胡云峰', '数学', '80');
insert into `sql`.`student` (`name`, `course`, `score`) values ('胡云峰', '英语', '85');
insert into `sql`.`student` (`name`, `course`, `score`) values ('邓兰', '语文', '88');
insert into `sql`.`student` (`name`, `course`, `score`) values ('邓兰', '数学', '70');
insert into `sql`.`student` (`name`, `course`, `score`) values ('邓兰', '英语', '68');

查询结果:


b0784bd6dd4e4c0ea2eca5a5258e6208.png

1. 首先我们要通过group by对姓名组合进行查询


select name from student 
group by name

查询结果:


fa86f843f60e48db93b2ca01cf16a041.png

2. 然后用min()聚合函数对每位同学最低的分数查询出来


select name,min(score) from student 
group by name


查询结果:

511f9ccc51ad465d877e17c798250ba5.png

3. 再用having筛选出最低分数都大于80的同学


select name,min(score) from student 
group by name 
having min(score)>80


查询结果:

06d1ef3d4ab14fa7862d179ab9d76306.png


4. 最后一步,因为我们只查询学生的姓名,不用查询分数,所以我们再嵌套一层函数,来只查询姓名即可


select name from 
(select name,min(score) from student group by name having min(score)>80) 
student


查询结果:


19f4dbcef10646839f73e0c3f6a296eb.png

PS:关于聚合函数


  • 聚合函数,顾名思义,就是将多条数据聚合成一条数据的函数(从N到1)
  • 常用的聚合函数有:max(),min(),sum(),avg(),count()
  • 其他:group by 通常与聚合函数一起,用来(分组数据),having 则用来(筛选条件)


2、行转为列查询(case/when/then/else/end/as)


  • student表中course列出现了大量重复的数据,所以合并成列名,方便观看使用


1.我们可以使用(case/when/then/)进行转化:


select name,
sum(case course when '语文' then score else 0 end) as '语文',
sum(case course when '数学' then score else 0 end) as '数学',
sum(case course when '英语' then score else 0 end) as '英语'
from student
group by name

2.或者也可以用if进行转化,效果也是一样的:

select name,
sum(if(course='语文',score,0)) as '语文',
sum(if(course='数学',score,0)) as '数学',
sum(if(course='英语',score,0)) as '英语'
from student
group by name

之前的查询结果

b0784bd6dd4e4c0ea2eca5a5258e6208.png

转为列之后的查询结果:

ba8e9cb3221c4173a00faa61fb24d119.png

3、对总成绩进行排名


1.首先我们通过rollup把总成绩算出来:

select ifnull(name,'总成绩') as name,
sum(if(course='语文',score,0)) as '语文',
sum(if(course='数学',score,0)) as '数学',
sum(if(course='英语',score,0)) as '英语',
sum(score) as '总成绩'
from student
group by name with rollup

查询结果:


0767974546824934bcea682a789dc25b.png

相关文章
|
13天前
|
XML SQL 数据格式
XML动态sql查询当前时间之前的信息报错
XML动态sql查询当前时间之前的信息报错
34 2
|
21天前
|
SQL JSON 数据库
influxdb 端点使用http进行sql查询,写数据
influxdb 端点使用http进行sql查询,写数据
59 0
|
5天前
|
SQL Java 数据库连接
JDBC连接SQL Server2008 完成增加、删除、查询、修改等基本信息基本格式及示例代码
这篇文章提供了使用JDBC连接SQL Server 2008数据库进行增加、删除、查询和修改操作的基本步骤和示例代码。
|
6天前
|
SQL 存储 分布式计算
|
12天前
|
SQL 存储 关系型数据库
SQL字符串查询有哪些坑?
本文通过创建一个包含不同格式姓名数据的表格,探讨了MySQL中字符排序规则(Collation)的影响。通过使用不区分大小写和空格的查询条件,文章演示了如何获取所有插入的记录,并解释了排序规则中"_ci"、"_cs"及"_bin"的区别。此外,还强调了在数据处理过程中,应考虑大小写敏感性和字符串前后空格的问题,以防导致统计或比较上的错误。最后,提供了Go语言中处理这类问题的方法,如使用`strings.EqualFold()`进行不区分大小写的字符串比较,以及使用`strings.TrimSpace()`去除字符串两端的空白字符。
|
18天前
|
SQL 安全 数据库
如何优化SQL查询
【8月更文挑战第1天】如何优化SQL查询
23 2
|
18天前
|
SQL 缓存 关系型数据库
SQL如何优化查询?
【8月更文挑战第1天】SQL如何优化查询?
27 1
|
21天前
|
SQL 存储 API
ES 实战复杂sql查询、修改字段类型
ES 实战复杂sql查询、修改字段类型
29 1
|
24天前
|
SQL 缓存 关系型数据库
提高SQL查询性能的技巧
【7月更文挑战第26天】提高SQL查询性能的技巧
26 3
|
1天前
|
SQL 数据库
实时数仓 Hologres产品使用合集之如何找回之前的SQL查询代码
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。