美文网首页
sql学习笔记6—分组查询

sql学习笔记6—分组查询

作者: 风一样的我1 | 来源:发表于2020-10-25 10:11 被阅读0次

参考资料来源于Bilibili《一天学会MYSQL数据库》

  • 分组查询
  • 模糊查询
  • 范围查询

1、分组计算

接着上述的学习笔记,score表的结构如下(三个字段分别为学号、课程号以及分数):

+-------+---------------+------+-----+---------+-------+
| Field | Type          | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| s_no  | varchar(10)   | NO   | PRI | NULL    |       |
| c_no  | varchar(10)   | NO   | PRI | NULL    |       |
| grade | decimal(10,0) | YES  |     | NULL    |       |
+-------+---------------+------+-----+---------+-------+

若我们想知道每一门课程的平均成绩,则要用到avg()函数以及group by方法

select c_no,avg(grade) from score group by c_no;
--result
+-------+------------+
| c_no  | avg(grade) |
+-------+------------+
| 3-105 |    85.3333 |
| 3-245 |    76.3333 |
| 6-166 |    81.6667 |
+-------+------------+

即先通过group by对score表按c_no分组,再计算组内平均值

2、分组条件和模糊查询

计算选修人数不小于2人且以3开头的课程的平均分数。
平均:avg()
选修人数不少于2:count
以3开头:like 模糊查询(类似于正则表达)
首先对课程进行分组,再筛选组内记录数大于2的课程,再使用模糊查询进行匹配

select c_no, avg(grade),count(*) from score group by  c_no having count(*)>=2 like '3%';
-- result
+-------+------------+----------+
| c_no  | avg(grade) | count(*) |
+-------+------------+----------+
| 3-105 |    85.3333 |        3 |
| 3-245 |    76.3333 |        3 |
| 6-166 |    81.6667 |        3 |
+-------+------------+----------+

其中having表示分组后的筛选方法,不能用where(原因见SQL中where与having的区别)
like表示模糊查询,对字符串进行匹配,%表示匹配任意字符串

3、范围查询的两种方式

查询score表中分数在70到90的数据。

  • where between and
  • where > and <
select * from score where grade >70 and grade <90;
--result
+------+-------+-------+
| s_no | c_no  | grade |
+------+-------+-------+
| 103  | 3-245 |    86 |
| 103  | 6-166 |    85 |
| 105  | 3-105 |    88 |
| 105  | 3-245 |    75 |
| 105  | 6-166 |    79 |
| 109  | 3-105 |    76 |
| 109  | 6-166 |    81 |
+------+-------+-------+
--第二种方式
select * from score where grade between 70 and 90;
--结果同上
+------+-------+-------+
| s_no | c_no  | grade |
+------+-------+-------+
| 103  | 3-245 |    86 |
| 103  | 6-166 |    85 |
| 105  | 3-105 |    88 |
| 105  | 3-245 |    75 |
| 105  | 6-166 |    79 |
| 109  | 3-105 |    76 |
| 109  | 6-166 |    81 |
+------+-------+-------+

相关文章

  • sql学习笔记6—分组查询

    参考资料来源于Bilibili《一天学会MYSQL数据库》 [https://www.bilibili.com/v...

  • SQL分组查询

    一.分组查询 1.使用group by进行分组查询 在使用group by关键字时,在select列表中可以指定的...

  • SQL学习笔记

    整体的SQL学习笔记,之后再分开来详细写。 查询 SELECT Select查询某些属性列的语法 Select查询...

  • oracle高级查询

    幕课oracle学习笔记 --!!!scott用户 --一.分组查询 --1.常用的分组函数:AVG(平均数),S...

  • First week

    用于自己复习笔记,初学MARKDOWN(W3SCHOOL学习) SQL SQL 指结构化查询语言SQL 使我们有能...

  • sql 分组查询-mysql

    group by <分组项> [having <分组筛选条件>] 1.统计各班人数: select 班级编号,co...

  • SQL语句:分组查询

    在对数据表中数据进行统计时,可能需要按照一定的类别分别进行统计。比如查询每个部门的员工数。 使用GROUP BY按...

  • SQL-分组查询

    分组查询 语法: 注意:查询列表必须特殊,要求是分组函数和group by后出现的字段 特点: 分组查询中的筛选条...

  • 分组查询的sql

    有个需求是这样的:大区和省份是一对多的关系。那么肯定在省份表中,有个逻辑外键叫大区id。这时候,我想看看大区的名称...

  • SQL表(增、删、改、查)基础:)

    学习SQL的第一天(7月17日) 跟着W3school学习SQL语法.... 整理笔记 SQL(结构化查询语言)由...

网友评论

      本文标题:sql学习笔记6—分组查询

      本文链接:https://www.haomeiwen.com/subject/tymgmktx.html