首页 > 数据库 >mysql之数据聚合

mysql之数据聚合

时间:2024-06-11 14:03:00浏览次数:14  
标签:salary 聚合 column employees PARTITION mysql department 数据 SELECT

官方文档

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_salary
  FROM employees
  GROUP 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_salary
  FROM employees
  GROUP 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)

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

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

ROLLUP()

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

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

CUBE()

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

SELECT
  department,
  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() 等。
示例:

SELECT
    id,
    product,
    sales_date,
    sales_amount,
    SUM(sales_amount) OVER (PARTITION BY product ORDER BY sales_date) AS cumulative_sales
FROM
    sales;

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

标签:salary,聚合,column,employees,PARTITION,mysql,department,数据,SELECT
From: https://blog.csdn.net/qq_42691309/article/details/139594828

相关文章

  • python数据分析
    frompyechartsimportoptionsasoptsfrompyecharts.chartsimportMap#假设你有一个包含省份和抖音大v人数的字典data={  "广东":100,  "江苏":80,  "山东":70,  "浙江":60,  "河南":50,  "河北":40,  &qu......
  • 管理数据必备;侦听器watch用法详解,vue2与vue3中watch的变化与差异
    目录一、侦听器(watch)是什么?二、Vue2中的watch(OptionsAPI)2.1、函数式写法2.2、对象式写法    ①对象式基础写法    ②回调函数handler    ③deep属性        ④immediate属性三、Vue3中的watch3.1、向下兼容(Vue2)的Options API3.2......
  • Java 开发面试题精选:Mysql 一篇全搞定
    前言在高级Java开发工程师的面试中,MySQL作为常见的数据库技术,其掌握程度往往是评估候选人综合能力的重要组成部分。在这篇文章中,我精选了一些最可能被问到的与MySQL相关的面试题目,这些题目可以全面考察候选人的理论知识、实战经验和问题解决能力,不管你是准备求职的小伙伴,还是......
  • MySQL复习题(期末考试)
    MySQL复习题(期末考试)1.MySQL支持的日期类型?DATE,DATETIME,TIMESTAMP,TIME,TEAR2.为表添加列的语法?altertable表名addcolumn列名数据类型;3.修改表数据类型的语法是?altertable表名modify列名新数据类型;4.更改表的列名的语法?altertable表名(t)change......
  • 爆肝三天,制作属于自己的地图——DAY2(地图数据发布)
    爆肝第二天,地图数据发布作者:御剑飞行在第一篇中,我们对开源的地图数据集作了介绍爆肝三天,制作属于自己的地图——DAY1(地图数据整理)大家是不是非常想把以上数据集发布呢?市面上有很多种支持地图数据集发布的平台,但是,像MapmostStudio功能这么全的,还没有呢。MapmostStudio......
  • Tdengine的时序数据库简介、单机部署、操作语句及java应用
    Tdengine的时序数据库简介、单机部署、操作语句及java应用   本文介绍了Tdengine的功能特点、应用场景、超级表和子表等概念,讲述了Tdengine2.6.0.34的单机部署,并介绍了taos数据库的常见使用方法及特色窗口查询方法,最后介绍了在java中的应用。一、tdengine简要介绍及应......
  • 淘宝and京东商品详情API与订单详情API的实时性与准确性(接口返回数据参考示例,可高并发
    API全称应用程序编程接口(ApplicationProgrammingInterface),是一组用于访问某个软件或硬件的协议、规则和工具集合。电商API就是各大电商平台提供给开发者访问平台数据的接口。目前,主流电商平台如淘宝、天猫、京东、苏宁等都有自己的API。封装接口介绍在实际开发中,为了提高......
  • 全球Web数据库管理工具推荐(ChatGPT 4o的推荐是什么样?)
    在现代数据管理和开发中,Web数据库管理工具变得越来越重要。这些工具不仅提供了直观的用户界面,还支持跨平台操作,方便用户在任何地方进行数据库管理。目录1.SQLynx2.phpMyAdmin3.Adminer4.DBeaver5结论以下是几款推荐的Web数据库管理工具,每款工具都有其独特的特......
  • Python数据分析与机器学习在电子商务推荐系统中的应用
    文章目录......
  • MySql JOIN
    MySqlJOIN背景最近在做一些项目时需要对数据库进行简单的select,由于之前一直在做HTML+JS+CSS所有对数据库不是很了解,现在从0开始学习,每天学习一点,做个理解总结。有理解偏差欢迎留言指正。简介JOIN用于根据两个或多个表之间关系,查询数据innerjoin内连接leftj......