MySQL必备基础之分组函数 聚合函数 分组查询详解

目录
  • 一、简单使用
  • 二、搭配DISTINCT去重
  • 三、COUNT()详细介绍
  • 四、分组查询

一、简单使用

SUM:求和(一般用于处理数值型)
AVG:平均(一般用于处理数值型)
MAX:最大(也可以用于处理字符串和日期)
MIN:最小(也可以用于处理字符串和日期)
COUNT:数量(统计非空值的数据个数)

以上分组函数都忽略空NULL值的数据

SELECT SUM(salary) AS 和,AVG(salary) AS 平均,MAX(salary) AS 最大,MIN(salary) AS 最小,COUNT(salary) AS 数量
FROM employees;

二、搭配DISTINCT去重

(以上函数均可)

SELECT SUM(DISTINCT salary) AS 和,AVG(DISTINCT salary) AS 平均,COUNT( DISTINCT salary) AS 去重数量,COUNT(salary) AS 不去重数量
FROM employees;

三、COUNT()详细介绍

#相当于统计行数方式一
SELECT COUNT(*)
FROM employees;
#相当于统计行数方式二,其中1可以用其他常量或字段替换
SELECT COUNT(1)
FROM employees;

效率问题:
MYISAM存储引擎下,COUNT(*)的效率高
INNODB存储引擎下,COUNT(*)COUNT(1)的效率差不多,比COUNT(字段)

因此一般用COUNT(*)统计行数

四、分组查询

#其中[]内为可选
SELECT 分组函数,列表(要求出现在 GROUP BY 的后面)
FROM 表
[WHERE 筛选条件]
GROUP BY 分组列表
[ORDER BY 子句]

示例:

#查询每个工种的最高工资
SELECT MAX(salary) AS 最高工资,job_id
FROM employees
GROUP BY job_id;

#查询每个部门中,邮箱包含a的员工的平均工资(分组前的筛选)
SELECT AVG(salary) AS 平均工资,department_id
FROM employees
WHERE email LIKE '%a%'
GROUP BY department_id;

#查询部门员工数量大于2的部门的员工数量(分组后的筛选)
#使用HAVING
SELECT COUNT(*) AS 员工数量,department_id
FROM employees
GROUP BY department_id
HAVING COUNT(*)>2;

#按照多字段
SELECT COUNT(*) AS 员工数量,job_id,department_id
FROM employees
GROUP BY job_id,department_id;

#完整结构
SELECT AVG(salary) AS 平均工资,department_id
FROM employees
WHERE department_id IS NOT NULL
GROUP BY department_id
HAVING AVG(salary)>9000
ORDER BY AVG(salary) DESC;

到此这篇关于MySQL必备基础之分组函数 聚合函数 分组查询详解的文章就介绍到这了,更多相关MySQL 分组函数 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2021-10-12

MySQL查询排序与查询聚合函数用法分析

本文实例讲述了MySQL查询排序与查询聚合函数用法.分享给大家供大家参考,具体如下: 排序 为了方便查看数据,可以对数据进行排序 语法: select * from 表名 order by 列1 asc|desc [,列2 asc|desc,...] 说明 将行数据按照列1进行排序,如果某些行列1的值相同时,则按照列2排序,以此类推 默认按照列值从小到大排列(asc) asc从小到大排列,即升序 desc从大到小排序,即降序 例1:查询未删除男生信息,按学号降序 select * from st

MySQL 分组查询和聚合函数

概述 相信我们经常会遇到这样的场景:想要了解双十一天猫购买化妆品的人员中平均消费额度是多少(这可能有利于对商品价格区间的定位):或者不同年龄段的化妆品消费占比是多少(这可能有助于对商品备货量的预估). 这个时候就要用到分组查询,分组查询的目的是为了把数据分成多个逻辑组(购买化妆品的人员是一个组,不同年龄段购买化妆品的人员也是组),并对每个组进行聚合计算的过程:. 分组查询的语法格式如下: select cname, group_fun,... from tname [where conditio

MySQL 聚合函数排序

目录 MySQL 结果排序-- 聚集函数 环境 查询结果排序 查询的分组与汇总 查一下 学生们平均年龄 查一下总人数是多少 查一下每个年龄有多少人 查出最大年龄 总结 MySQL 结果排序-- 聚集函数 环境 CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号', `student_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_c

MySql 中聚合函数增加条件表达式的方法

Mysql 与聚合函数在一起时候where条件和having条件的过滤时机 where 在聚合之前过滤 当一个查询包含了聚合函数及where条件,像这样的情况 select max(cid) from t where t.id<999 这时候会先进行过滤,然后再聚合.先过滤出ID<999的记录,再查找最大的cid返回. having 在聚合之后过滤 having在分组的时候会使用,对分组结果进行过滤,通常里面包含聚合函数. SELECT ip,MAX(id) FROM app GROUP BY

MySQL中聚合函数count的使用和性能优化技巧

本文的环境是Windows 10,MySQL版本是5.7.12-log 一. 基本使用 count的基本作用是有两个: 统计某个列的数据的数量: 统计结果集的行数: 用来获取满足条件的数据的数量.但是其中有一些与使用中印象不同的情况,比如当count作用一列.多列.以及使用*来表达整行产生的效果是不同的. 示例表如下: CREATE TABLE `NewTable` ( `id` int(11) NULL DEFAULT NULL , `name` varchar(30) NULL DEFAUL

MySQL常用聚合函数详解

一.AVG AVG(col) 返回指定列的平均值 二.COUNT COUNT(col) 返回指定列中非NULL值的个数 三.MIN/MAX MIN(col):返回指定列的最小值 MAX(col):返回指定列的最大值 四.SUM SUM(col) 返回指定列的所有值之和 五.GROUP_CONCAT GROUP_CONCAT([DISTINCT] expr [,expr ...]              [ORDER BY {unsigned_integer | col_name | expr}

MySQL使用聚合函数进行单表查询

聚合函数 作用于一组数据,对那组数据返回一个值 count :统计结果记录多少条数, max:统计最大值 min:统计最小值 sum:计算求和 avg: 计算平均值 注意,分组函数 group by.如果要对 分组后 的数据进行筛选,那么必须使用 having 关键字,条件写在 having 后面: where:先过滤已有的数据,在分组,在聚合函数计算: having:过滤分组之后的数据.插入我们需要练习的表city 表 CREATE TABLE `city` ( `id` INT AUTO_I

详解MySQL中concat函数的用法(连接字符串)

MySQL中concat函数 使用方法: CONCAT(str1,str2,-) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意: 如果所有参数均为非二进制字符串,则结果为非二进制字符串. 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串. 一个数字参数被转化为与之相等的二进制字符串格式:若要避免这种情况,可使用显式类型 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col) MySQ

MySQL中group_concat函数深入理解

本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 基本查询 mysql> select * from aa; +------+------+ | id| name | +------+------+ |1 |

浅谈MySQL中group_concat()函数的排序方法

group_concat()函数的参数是可以直接使用order by排序的.666.. 下面通过例子来说明,首先看下面的t1表. 比如,我们要查看每个人的多个分数,将该人对应的多个分数显示在一起,分数要从高到底排序. 可以这样写: SELECT username,GROUP_CONCAT(score ORDER BY score DESC) AS myScore FROM t1 GROUP BY username; 效果如下: 以上这篇浅谈MySQL中group_concat()函数的排序方法就

浅谈mysql中concat函数,mysql在字段前/后增加字符串

MySQL中concat函数 使用方法: CONCAT(str1,str2,-) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意: 如果所有参数均为非二进制字符串,则结果为非二进制字符串. 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串. 一个数字参数被转化为与之相等的二进制字符串格式:若要避免这种情况,可使用显式类型 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col) MySQ

mysql中find_in_set()函数的使用及in()用法详解

MySQL手册中find_in_set函数的语法解释: FIND_IN_SET(str,strlist) str 要查询的字符串 strlist 字段名 参数以","分隔 如 (1,2,6,8,10,22) 查询字段(strlist)中包含(str)的结果,返回结果为null或记录 假如字符串str在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间. 一个字符串列表就是一个由一些被 ',' 符号分开的子链组成的字符串.如果第一个参数是一个常数字符串,而第

mysql中find_in_set()函数的使用详解

首先举个例子来说: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点.4图文等等 . 现在有篇文章他既是头条,又是热点,还是图文,type中以 1,3,4 的格式存储.那我们如何用sql查找所有type中有4的图文类型的文章呢?? 这就要我们的 find_in_set 出马的时候到了.以下为引用的内容: select * from article where FIND_IN_SET('4',type) --------------------------------