美文网首页
分组筛选的异同

分组筛选的异同

作者: 咖A喱 | 来源:发表于2019-03-26 14:49 被阅读0次
语法
SELECT 分组函数,查询字段,
FROM 表
WHERE 筛选条件
GROUP BY 分组的字段
HAVING 分组函数的筛选条件
ORDER BY 排序的字段


特点

  1. GROUP BY后跟分组函数查询的字段
  2. 分组可以按单个字段也可以多个字段
使用的表 位置 关键字
分组前筛选 原始表 group by 之前 where
分组后筛选 group by后的结果集 group by 之后 having

案例

CREATE DATABASE IF NOT EXISTS students DEFAULT CHARSET UTF8 COLLATE UTF8_GENERAL_CI ;
USE students;
DROP TABLE IF EXISTS student_info;
CREATE TABLE student_info(
`name` VARCHAR(10) NOT NULL,
id INT NOT NULL,
chinese_score FLOAT NOT NULL,
math_score FLOAT NOT NULL,
english_score FLOAT NOT NULL);

INSERT INTO student_info VALUES ('张三',1,1,98),('李四',2,1,89),('王五',3,1,56),('代',4,1,78),
('开发',5,2,96),('大彻',6,2,76),('到底',7,2,46),
('隔热片',8,3,78),('功夫',9,3,85),('粉丝',10,3,91),
('丰富',11,4,82),('废惹',12,4,77),('大大',13,4,76),
('光荣',14,5,95),('分隔',15,5,72),('苹果',16,5,86);
SELECT * FROM student_info;

name           id  class_id  chinese_score  
---------  ------  --------  ---------------
张三              1         1               98
李四              2         1               89
王五              3         1               56
代               4         1               78
开发              5         2               96
大彻              6         2               76
到底              7         2               46
隔热片             8         3               78
功夫              9         3               85
粉丝             10         3               91
丰富             11         4               82
废惹             12         4               77
大大             13         4               76
光荣             14         5               95
分隔             15         5               72
苹果             16         5               86

分组前查询

  1. 查询班级id为1和2的学生的总个数

SELECT COUNT(*) AS 总数,class_id AS 班级
FROM student_info
WHERE class_id IN(1,2)
GROUP BY 班级;

总数  班级  
------  --------
     4         1
     3         2
  1. 查询每个班级语文成绩及格(分数>60)学生成绩的平均数

SELECT class_id AS 班级,ROUND(AVG(chinese_score),2) AS 语文成绩平均数
FROM student_info
WHERE chinese_score > 60
GROUP BY 班级

SELECT class_id AS 班级,ROUND(AVG(chinese_score),2) AS 语文成绩平均数
FROM student_info
WHERE chinese_score > 60
GROUP BY 班级

班级  语文成绩平均数  
------  -----------------------
     1                    88.33
     2                    86.00
     3                    84.67
     4                    78.33
     5                    84.33
    
    
班级  原始语文成绩平均数  
------  -----------------------------
     1                          80.25
     2                          72.67
     3                          84.67
     4                          78.33
     5                          84.33

分组后查询

  1. 查询语文成绩平均分大于75的班级
SELECT class_id AS 班级,ROUND(AVG(chinese_score),2) AS 语文成绩平均分
FROM student_info
GROUP BY 班级
HAVING 语文成绩平均分 > 75;
班级  语文成绩平均分  
------  -----------------------
     1                    80.25
     3                    84.67
     4                    78.33
     5                    84.33
  1. 查询每个班级的语文成绩最高分,并按照降序排序
SELECT class_id AS 班级,MAX(chinese_score) AS 最高分
FROM student_info
GROUP BY 班级
HAVING 最高分 > 90
ORDER BY 最高分 DESC;
班级  最高分  
------  -----------
     1           98
     2           96
     5           95
     3           91

相关文章

  • 分组筛选的异同

    语法 特点: GROUP BY后跟分组函数查询的字段 分组可以按单个字段也可以多个字段 案例 分组前查询 查询班级...

  • 分组和筛选

    select from where grouo by分组 having分组在筛选 order by排序 selec...

  • MySQL(七)DQL之分组查询

    一、语法 select 分组函数,分组后的字段from 表【where 筛选条件】group by 分组的字段【h...

  • mysql DQL语言分组查询

    一、语法select 分组函数,分组后的字段from 表【where 筛选条件】group by 分组的字段【ha...

  • 数据库之having子句

    作用 为group by分组指定条件,筛选出想要的分组。而where是筛选出想要的行。 书写顺序 聚合健所对应的条...

  • mysql分组查询

    进阶5:分组查询 /*语法: select 查询列表from 表【where 筛选条件】group by 分组的字...

  • sql 分组查询-mysql

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

  • SQL-DQL(6)之分组查询

    语法: 注意: √一. 简单分组查询练习 √二. 添加筛选条件分组 √三. 按表达式/函数/别名分组查询 √. 四...

  • SQL-分组查询

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

  • 单条sql 语句

    select * from emp 查询 where 1=1 筛选 group by 分组...

网友评论

      本文标题:分组筛选的异同

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