mysql之数据聚合

官方文档

SUM(column)

用于计算指定列的总和。
示例:计算每个部门员工的总工资

SELECT department, SUM(salary) AS total_salary
FROM employees
GROUP BY department;

AVG(column)

用于计算指定列的平均值。
示例:计算每个部门员工的平均工资

SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department;

COUNT(column)

用于统计指定列中非 NULL 值的个数。
示例:统计每个部门有多少员工

SELECT department, COUNT(employee_id) AS num_employees
FROM employees
GROUP BY department;

COUNT(*)

用于统计总行数。
示例:统计公司总共有多少员工

SELECT COUNT(*) AS total_employees
FROM employees;

MAX(column)

用于返回指定列中的最大值。
示例:找出每个部门工资最高的员工

SELECT e.department, e.name, e.salary
FROM employees e
INNER JOIN (SELECT department, MAX(salary) AS max_salaryFROM employeesGROUP BY department
) t ON e.department = t.department AND e.salary = t.max_salary;

MIN(column)

用于返回指定列中的最小值。
示例:找出每个部门工资最低的员工

SELECT e.department, e.name, e.salary
FROM employees e
INNER JOIN (SELECT department, MIN(salary) AS min_salaryFROM employeesGROUP BY department
) t ON e.department = t.department AND e.salary = t.min_salary;
GROUP_CONCAT(column):

用于将指定列中的值连接起来,形成一个字符串。
示例:列出每个部门所有员工的名字

SELECT department, GROUP_CONCAT(name) AS employees
FROM employees
GROUP BY department;

VAR_POP(column) 和 VAR_SAMP(column)

用于计算总体方差和样本方差。
示例:计算每个部门员工工资的总体方差和样本方差

SELECT department, VAR_POP(salary) AS population_variance,VAR_SAMP(salary) AS sample_variance
FROM employees
GROUP BY department;

STDEV_POP(column) 和 STDEV_SAMP(column)

用于计算总体标准差和样本标准差。
示例:计算每个部门员工工资的总体标准差和样本标准差

SELECTdepartment,SQRT(VAR_POP(salary)) AS population_std_dev,SQRT(VAR_SAMP(salary)) AS sample_std_dev
FROM employees
GROUP BY department;

ROLLUP()

提供分级汇总,可以同时得到小计和总计。
示例:计算每个部门每个职位的总工资,以及每个部门的总工资和整个公司的总工资

SELECTdepartment,job_title,SUM(salary) AS total_salary
FROM employees
GROUP BY ROLLUP(department, job_title);

CUBE()

提供多维度的分组汇总。
示例:计算每个部门每个职位的总工资,以及每个部门的总工资、每个职位的总工资和整个公司的总工资

SELECTdepartment,job_title,SUM(salary) AS total_salary
FROM employees
GROUP BY CUBE(department, job_title);

窗口函数

窗口函数之所以被称为"窗口函数",是因为它们的工作方式类似于在数据集上滑动一个"窗口",并对该窗口内的行进行计算。

这里的"窗口"指的是一组行,这组行被用作计算的基础。窗口函数会为每行数据计算一个值,这个值是基于该行所在的窗口中的其他行计算得出的。

与聚合函数(如 SUM、AVG 等)不同,窗口函数不会改变返回行的数量。相反,它们会为每个输入行生成一个输出行,并在该行上添加一个计算值。

窗口函数之所以被称为"窗口"函数,是因为它们通过在数据集上滑动一个"窗口"来计算结果。这个"窗口"可以是基于某些条件(如 PARTITION BY 子句)定义的一组行,也可以是整个数据集。

在计算每个部门内员工的工资排名时,我们使用 RANK() 窗口函数。这个函数会为每个员工计算他们在所属部门内的工资排名。在计算每个员工排名时,函数会"窗口"到该员工所属的部门内的其他员工,并根据工资大小进行排序。

窗口函数主要有以下几种:

ROW_NUMBER()

为每个分组内的行记录一个顺序号,序号从 1 开始,且不会因为值的相等而重复。

RANK()

为每个分组内的行记录一个排名,如果有并列,则会留下空位。

DENSE_RANK()

为每个分组内的行记录一个排名,如果有并列,则不会留下空位。

NTILE(n)

将分组数据划分为 n 个等sized 窗格,记录每条数据所在的窗格编号。

LEAD(column, [offset], [default_value])

用于获取当前行往下偏移 offset 行的值,如果数据不存在则使用 default_value。

LAG(column, [offset], [default_value])

用于获取当前行往上偏移 offset 行的值,如果数据不存在则使用 default_value。

FIRST_VALUE(column)

返回分组内当前行之前的第一个值。

LAST_VALUE(column)

返回分组内当前行之后的最后一个值。

实例

这些窗口函数通常与 OVER 子句一起使用,用于对查询结果进行复杂的排序、分组和计算。下面是一个综合运用多个窗口函数的例子:

SELECT department,name,salary,ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS rn,RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS ranking,DENSE_RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS dense_ranking,LEAD(salary, 1, 0) OVER (PARTITION BY department ORDER BY salary DESC) AS next_salary,LAG(salary, 1, 0) OVER (PARTITION BY department ORDER BY salary DESC) AS prev_salary
FROM employees;

这个查询不仅返回了每个员工的基本信息,还计算了他们在所在部门内的排名,以及与前一个和下一个员工工资的差异。窗口函数的灵活性和复杂性为数据分析提供了强大的工具。

partition 和 over

在 MySQL 中,partition 和 over 是两个相关但不同的概念:

Partition

Partition 是一种将表格数据逻辑上划分为多个部分的方法。
通过在 CREATE TABLE 或 ALTER TABLE 语句中指定 PARTITION BY 子句,可以基于某些列将数据划分为多个分区。
分区可以提高查询效率,因为 MySQL 只需要访问相关的分区,而不是整个表格。常见的分区方式包括按月、按年、按范围等。
示例:

CREATE TABLE sales
(id INT,product VARCHAR(50),sales_date DATE
)
PARTITION BY RANGE (YEAR(sales_date))
(PARTITION p2023 VALUES LESS THAN (2024),PARTITION p2024 VALUES LESS THAN (2025),PARTITION p2025 VALUES LESS THAN (2026)
);

Window Functions (OVER)

Window functions 是一类特殊的函数,可以在查询结果中的每一行上执行计算,但不会改变该行的输出。
OVER 子句用于定义窗口函数的范围,指定在哪些行上执行计算。
常见的窗口函数包括 ROW_NUMBER()、RANK()、DENSE_RANK()、SUM()、AVG() 等。
示例:

SELECTid,product,sales_date,sales_amount,SUM(sales_amount) OVER (PARTITION BY product ORDER BY sales_date) AS cumulative_sales
FROMsales;

在这个例子中,SUM(sales_amount) OVER (PARTITION BY product ORDER BY sales_date) 会计算每个产品的累计销售额。PARTITION BY product 指定按产品进行分组,ORDER BY sales_date 指定按销售日期排序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/851605.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙轻内核M核源码分析系列二十 Newlib C

LiteOS-M内核LibC实现有2种,可以根据需求进行二选一,分别是musl libC和newlibc。本文先学习下Newlib C的实现代码。文中所涉及的源码,均可以在开源站点https://gitee.com/openharmony/kernel_liteos_m 获取。 使用Musl C库的时候&#xff0c…

具有可编程电流限制的1.5A电源开关LPW5210用于5V或USB供电输出过流保护只要3毛

前言 适合要求反应时间较快的保护电路,保险丝或自恢复保险丝也能起到保护作用,但断开电流是额定电流的一倍,过流较小时,甚至需要数秒或更长的时间才能保护,因此半导体的过流保护开关更合适,相对成本要高一…

Synchronized的“特性保证”

1. 互斥性(Mutual Exclusion) 定义:synchronized确保了同一时刻只有一个线程可以执行被其修饰的代码块或方法,即多个线程在访问共享资源时不会发生冲突。源码分析:在JVM中,synchronized的实现依赖于Java对象头中的Mark Word和Monitor对象。当一个线程尝试进入synchronize…

replaceAll is not a function 详解

先说说原因: 在chrome 浏览器中使用 replaceAll 报这个错误,是因为chrome 版本过低, 在chrome 85 以上版本才支持 用法 replaceAll(pattern, replacement)const paragraph "I think Ruths dog is cuter than your dog!"; console…

数据可视化后起之秀——pyecharts

题目一:绘制折线图,展示商家A与商家B各类饮品的销售额 题目描述: 编写程序。根据第9.3.1,绘制折线图,展示商家A与商家B各类饮品的销售额。 运行代码: #绘制折线图,展示商家A与商家B各类饮品的…

淘宝数据抓取的全景解析

——分析淘宝数据抓取的常见方法及其适用场景,探讨不同技术如何影响数据的质量和可用性 在当今数据驱动的电子商务时代,能够有效地抓取和利用数据成为商家获得竞争优势的关键。淘宝作为中国最大的在线零售平台,其海量数据具有极高的价值&…

Spring--Bean的作用域,生命周期

Bean的作用域 Bean的作用域有很多种,在Spring Framework中支持6种(其中有四种只有在web环境中才能生效),同时Spring还支持自定义Bean的范围。 Spring Framework中支持的6种范围: 作用域解释singleton每个Spring IoC…

优化MySQL连接管理:深入解析max_connections参数与解决Too Many Connections策略

前言 ​ 在现代的数据库管理中,合理配置max_connections参数对于确保MySQL数据库的稳定性和高效性至关重要。本文将深入探讨max_connections的基本概念,分析导致“Too many connections”错误的常见原因,并提供一系列解决方案,以…

QStack、QQueue 先进后出 先进先出 用法

实验QStack的先进后出和 QQueue 的先进先出 QStack、QQueue #include <QCoreApplication> #include <QDebug> #include <QStack> #include <QQueue>//栈的使用 后进先出void QStackPrint(){QStack<int> stack;stack.push(10);stack.push(20);st…

从零到一建设数据中台(番外篇)- 数据中台UI欣赏

番外篇 - 数据中台 UI 欣赏 话不多说,直接上图。

想让谷歌独立站关键词排名一飞冲天?这个秘密技巧必须知道!

在激烈的谷歌排名竞争中&#xff0c;我们要确保自己优化的独立站在谷歌搜索结果中占据首页位置至关重要。排名首页不仅能显著提高展现和流量&#xff0c;还能带来更多潜在客户和业务机会。本文将从谷歌SEO技术的角度&#xff0c;深入探讨在谷歌独立站关键词排名首页最重要的几个…

ShardingSphere跨表查询报错

目录 一、场景简介二、报错信息三、SQL四、原因五、解决方法一、调整SQL&#xff0c;不使用子查询方法二、将子查询的SQL独立出来&#xff0c;后续连接逻辑由代码处理 一、场景简介 1、使用ShardingSphere按月份进行分表 2、单月查询正常&#xff08;单表&#xff09; 3、跨…

CA证书及PKI

文章目录 概述非对称加密User Case: 数据加密User Case: 签名验证潜在问题 CACA证书的组成CA签发证书流程CA验证签名流程CA吊销证书流程 PKI信任链证书链 概述 首先我们需要简单对证书有一个基本的概念&#xff0c;以几个问题进入了解 ❓ Question1: 什么是证书&#xff1f; 证…

福利|免费申请长期单域名、通配符、多域名SSL证书,不限量

一、什么是单域名、通配符、多域名SSL证书 单域名证书&#xff1a;仅保护一个特定的域名。 通配符证书&#xff1a;保护一个主域名及其所有二级子域名。 多域名证书&#xff1a;在同一张证书中保护多个不同的域名&#xff0c;可以是主域名也可以是子域名&#xff0c;域名之间…

目前比较好用的LabVIEW架构及其选择

LabVIEW提供了多种架构供开发者选择&#xff0c;以满足不同类型项目的需求。选择合适的架构不仅可以提高开发效率&#xff0c;还能确保项目的稳定性和可维护性。本文将介绍几种常用的LabVIEW架构&#xff0c;并根据不同项目需求和个人习惯提供选择建议。 常用LabVIEW架构 1. …

Invalid keystore format,获取安全码SHA1值出错

AndroidStudio版本&#xff1a;Android Studio Electric Eel | 2022.1.1 项目运行JDK版本&#xff1a;11.0.15&#xff0c;查看方法如下&#xff1a; 在Terminal 窗口中&#xff0c;获取的Java版本是&#xff1a;1.8.0&#xff0c;修改Java系统环境变量&#xff0c;改成&#…

如何在MySQL中创建不同的索引和用途?

目录 1 基本的 CREATE INDEX 语法 2 创建单列索引 3 创建多列索引 4 创建唯一索引 5 创建全文索引 6 在表创建时添加索引 7 使用 ALTER TABLE 添加索引 8 删除索引 9 索引管理的最佳实践 10 示例 在 MySQL 中&#xff0c;索引&#xff08;index&#xff09;是一种用于…

Git保姆级教程

目录 Git是什么&#xff0c;为什么要学这个工具&#xff1f; 码云注册并创建仓库 Git安装 查看本地仓库状态 添加到暂存区 提交到本地库 修改文件 版本回退 创建、切换和删除分支 合并分支 克隆远端库到本地 将本地库推送到远端库 命令设置别名 Git是什么&#xf…

远程咨询的好处都有哪些呢?

随着科技的飞速发展&#xff0c;远程咨询正逐渐成为人们获取医疗服务的一种新方式。那么什么是远程咨询呢&#xff1f;其又有哪些好处呢&#xff1f;下面就给大家详细地说说。 远程咨询的概念 远程咨询&#xff0c;顾名思义&#xff0c;是指通过互联网技术&#xff0c;实现患…

LeetCode 746.使用最小花费爬楼梯

题目&#xff1a; 给你一个整数数组 cost &#xff0c;其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用&#xff0c;即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你计算并返回达到楼梯顶部的最低花费…