MySQL函数2

聚合函数(只有一个结果)

[En]

Aggregate function (only one result)

聚合函数的介绍

在目前的MySQL下不可以嵌套使用

MySQL函数2
  • 聚合函数的常用类型(都不含空值)

AVG()

SUM()

MAX()

MIN()

COUNT()

AVG()和SUM()

  • AVG:求平均
  • SUM():求和
#求平均工资和工资总和
SELECT AVG(salary),SUM(salary)
FROM employees;

注:不能处理字符串

MAX()和MIN()

  • MAX():求最大
  • MIN():求最小
#求最高工资和最低工资
SELECT AVG(salary),SUM(salary)
FROM employees;

注意:可以处理字符串、数值类型和日期-时间类型的字段(或变量

[En]

Note: fields (or variables) that can handle strings, numeric types, and date-time types

COUNT()

COUNT():计算指定字段在查询结果中出现的个数

SELECT COUNT('*')
FROM employees

注:不包括null

  • 查询表中有多少条记录:

  • COUNT(‘*’)(推荐)

  • COUNT(1)(推荐)
  • COUNT(指定字段), 不一定对(MyISAM存储中效率一样)

  • AVG = SUM \ COUNT永远成立

GROUP BY(分组)

基本使用

MySQL函数2
#求各个部门的平均工资
SELECT department_id,AVG(salary)
FROM employees
GROUP BY department_id;

使用 多个列分组

MySQL函数2
#求各个部门同一工种的平均工资
SELECT department_id,job_id,AVG(salary)
FROM employees
GROUP BY department_id,job_id;#没有先后之分
  • 非组函数的字段 必须声明在GROUP BY中
  • GROUP BY在FROM和WHERE的后面,在ORDER BY和LIMIT的后面

GROUP BY中使用WITH ROLLUP

(末尾)还会有一行,即总平均值。

[En]

There will be one more line (at the end), which is the total average.

不能用ORDER BY 排序

#求各个部门的平均工资
SELECT department_id,AVG(salary)
FROM employees
GROUP BY department_id WITH ROLLUP;

HAVING的使用(过滤数据)

MySQL函数2
  • 过滤条件有聚合函数,必须用HAVING来替换
  • 过滤条件没有聚合函数,推荐用WHERE
  • HAVING必须声明在GROUP BY的后面
  • 使用HAVING的前提是使用了GROUP BY

基本使用

#查部门id是10,20,30,40四个部门最高工资超过10000的部门信息
方式一:推荐(效率高)
SELECT department_id,sum(salary)
FROM employees
WHERE department——id IN(10,20,30,40)
GROUP BY department_id
HAVING sum(salary) > 10000;

方式二:
SELECT department_id,sum(salary)
FROM employees
GROUP BY department_id
HAVING sum(salary) > 10000 and department——id IN(10,20,30,40);

WHERE和HAVING的比较

  • 适用范围:HARING适用范围更广
  • 没有聚合函数:WHERE效率高于HARING

MySQL函数2

SELECT的执行过程

查询结构

#SQL92
SELECT...,...(存在组函数)
FROM ...,...

WHERE 多表的连接 AND 不包含聚合函数的过滤条件
GROUP BY...,...

HARING BY包含聚合函数的过滤条件
ORDER BY...,...(ASC \ DESC)
LIMIT...,...

#SQL99
SELECT...,...(存在组函数)#2

FROM ... (LEFT \ RIGHT)JOIN ...#1
ON多表的连接条件
(LEFT \ RIGHT)JOIN ...

ON 多表的连接条件
WHERE 不包含聚合函数的过滤条件
GROUP BY...,...

HARING BY包含聚合函数的过滤条件

ORDER BY...,..(ASC \ DESC)#3
LIMIT...,...

SELECT执行顺序(执行每一步都会有一个虚拟表)

FROM->ON->(LEFT \ RIGHT JOIN)->WHERE->GROUP BY->HAVING->SELECT->DISTINCT->ORDER BY->LIMIT

SQL执行原理

同上

Original: https://www.cnblogs.com/wht-de-bk/p/15969557.html
Author: T,a,o
Title: MySQL函数2

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/507780/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 如何在MySQL中进行简单的增删改查

    — 创建dept表并设置主键create table dept(deptno int(2) primary key ,dname varchar(14),loc var…

    数据库 2023年6月16日
    0106
  • Java面试题(十)–Spring Cloud

    1 基础知识篇 1、什么是微服务架构? 微服务架构是一种架构模式或者说是架构风格,它提倡将单一应用程序划分成一组小的服务。每个服务运行在其独立的自己的进程中服务之间相互配合、相互协…

    数据库 2023年6月16日
    0101
  • MySQL45讲之查询慢或者阻塞

    前言 本文介绍了表锁定和执行速度慢的实例,以及表锁定时的故障排除方法。 [En] This paper introduces examples of table locking a…

    数据库 2023年5月24日
    0107
  • Linux Centos 打开和关闭防火墙

    systemctl status firewalld.service # 查看防火墙状态 systemctl start firewalld.service # 开启防火墙 sys…

    数据库 2023年6月14日
    094
  • 慢SQL,压垮团队的最后一根稻草!

    一、什么是慢 SQL 什么是慢SQL? 顾名思义,运行时间较长的 SQL 语句即为慢 SQL! 那问题来了,多久才算慢呢? 这个慢其实是一个相对值,不同的业务场景下,标准要求是不一…

    数据库 2023年6月14日
    095
  • MySQL隐式转换的坑

    MySQL以以下规则描述比较操作如何进行转换: 两个参数至少有一个是 NULL 时,比较的结果也是 NULL,例外是使用 实际使用中经研究发现字符串和数字比较时,优先把字符串转换为…

    数据库 2023年6月9日
    068
  • MySQL之group by分组查询

    有如下数据: 一个简单的分组查询案例 [En] A simple case of grouping query 按照部门编号deptno分组,统计每个部门的平均工资。 select…

    数据库 2023年5月24日
    0101
  • City of stars

    本文来自博客园,作者:ukyo–BlackJesus,转载请注明原文链接:https://www.cnblogs.com/ukzq/p/16747306.html Or…

    数据库 2023年6月11日
    0100
  • JavaWeb连接MySQL数据库

    JavaWeb连接MySQL数据库 JavaWeb连接MySQL数据库的方式有很多,首先我们讲解JDBC的配置方法 一、JDBC的配置方法 1、什么是JDBC 什么是JDBC嘞?J…

    数据库 2023年5月24日
    068
  • 容器化|在 S3 备份恢复 RadonDB MySQL 集群数据

    作者:程润科、钱芬视频:钱芬 上一篇文章我们演示了如何快速实现 MySQL 高可用集群部署,以及部署集群的校验和卸载方式。本文将演示如何对集群进行备份和恢复。 部署版本为 Rado…

    数据库 2023年5月24日
    088
  • 微服务架构项目浅析

    微服务架构的演变 最初的需求 业务发展后需要克服的问题 微服务架构使用的组件 Nginx Redis Rabbitmq Mysql jar jdk * 总结 ​ 这个章节主要介绍微…

    数据库 2023年6月6日
    078
  • 加班整理出来的MySQL数据库基本操作送给大家,非常详细!

    哈喽兄弟们,中秋闲着没事,整理了一些数据库的基本操作,分享给大家,希望对大家有所帮助~ ; 一、SQL语句 (mysql 数据库中的语言) show databases;查看数据库…

    数据库 2023年6月14日
    093
  • 如何优化前端性能?

    导读:随着前端的范畴逐渐扩大,深度逐渐下沉,富前端必然带来的一个问题就是性能。特别是在大型复杂项目中,重前端业务可能因为一个小小的数据依赖,导致整个页面卡顿甚至崩溃。本文基于Qui…

    数据库 2023年6月14日
    062
  • MySQL 的日志:binlog

    前言:binlog 用于记录数据库执行 写入性操作的日志信息,以二进制的形式保留在磁盘中。它是由 Server 层进行记录的,使用任何存储引擎都会产生 binlog。 实验准备 我…

    数据库 2023年5月24日
    085
  • update更新很慢(字段类型引发)

    开发人员在sql审核平台提交了2000多条update语句,每条语句只更新一条,where条件由索引,在sql审核平台在测试执行阶段已经执行了20多分钟。于是让看一下数据库后台线程…

    数据库 2023年6月16日
    0110
  • mysql 常用的命令2

    找出每个部门,不同工作岗位的最高薪资。 mysql> select deptno,job,max(sal) from emp group by deptno,job; +&#…

    数据库 2023年5月24日
    067
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球