MySQL基础进阶:汇总数据

汇总数据

  • 聚合函数
  • GROUP BY子句
  • HAVING子句
  • ROLLUP运算符

聚合函数

聚合函数:输入一系列值并聚合为一个结果的函数。

  1. MAX():求最大值
  2. MIN():求最小值
  3. AVG():求平均值
  4. SUM():求和
  5. COUNT():计数
SELECT MAX(invoice_total) AS highest,MIN(invoice_total) AS lowest,    -- 函数用于属性栏定义中AVG(invoice_total) AS average,SUM(invoice_total) AS total,COUNT(invoice_total) AS number_of_invioces,COUNT(*) AS total_records,   -- 表中共有多少条记录
COUNT(DISTINCT client_id) AS number_of_clients
-- DISTINCT 用于删除重复的属性值,然后再计数
FROM invoices
WHERE invoice_date > '2019-07-01' 

GROUP BY子句

按一列或多列中记录利用某种规则重新汇总,生成新的记录。
语法:GROUP BY …… 用于将某个属性列下相同的值进行合并,一般和函数公用,函数放在SELECT 后,GROUP BY放在WHERE后
NOTE:

  1. 注意语句的位置顺序。
  2. 解答复杂问题时,学会先分解拆分为简单的小问题或小步骤逐个击破。合理运用分解组合和IPO思想。
  3. 当有多个统计分类限制条件时,依次分类细化,多个限制条件也是逐步细化,从大到小的包含关系。
SELECT client_id,SUM(invoice_total) AS total_sales
FROM invoices
WHERE invoice_date > '2019-07-01' 
GROUP BY client_id
ORDER BY total_sales DESC
SELECTc.state,c.city,SUM(i.invoice_total) AS total_sales
-- SELECT通常都是选择分组依据列+目标统计列的聚合函数。选别的列没有意义
FROM invoices i
JOIN clients cUSING (client_id)
WHERE invoice_date > '2019-07-01' 
GROUP BY c.state, c.city
-- 虽然用了两个属性值为分组依据,但是从数据来说仍然是一个城市的
SELECTp.date,pm.name,SUM(amount) AS total_payments
FROM payments p
JOIN payment_methods pmON P.payment_method = pm.payment_method_id
GROUP BY p.date, p.payment_method
ORDER BY p.date
-- 用了两个属性值为统计依据,再满足第一个汇总依据基础上再满足第二个汇总依据

HAVING子句

HAVING 和 WHERE 都是是条件筛选语句,条件的写法相通,数学比较(包括特殊比较)逻辑运算都可以用(如AND、REGEXP等等)。
两者本质区别:

  • WHERE是对FROM JOIN里原表中的列进行事前筛选,所以WHERE可以对没选择的列进行筛选,但必须用原表列名而不能用SELECT中确定的列别名。
  • 相反HAVING ……对SELECT ……查询后(通常是分组并聚合查询后)的结果列进行事后筛选,若SELECT里起了别名的字段则必须用别名进行筛选,且不能对SELECT里未选择的字段进行筛选。唯一特殊情况是,当HAVING筛选的是聚合函数时,该聚合函数可以不在SELECT里显性出现
SELECTclient_id,SUM(invoice_total) AS total_sales,COUNT(*) AS number_of_invoices
FROM invoices
GROUP BY client_id
HAVING total_sales > 500 AND number_of_invoices >5
-- HAVING子句用于统计后的数据筛选
SELECTc.customer_id,c.first_name,c.last_name,SUM(oi.quantity * oi.unit_price) AS total_sales
FROM customers c
JOIN orders o USING (customer_id)
JOIN order_items oi USING (order_id)
WHERE c.state = 'VA'
GROUP BY c.customer_id
HAVING total_sales > 100
NOTE: 当HAVING筛选的是聚合函数时,该聚合函数可以不在SELECT里显性出现。

ROLLUP运算符

GROUP BY …… WITH ROLLUP 自动汇总型分组(对 SUM 之类的聚合值进行分组后的汇总),若是多字段分组的话汇总也会是多层次的,注意这是MySQL扩展语法,不是SQL标准语法。
WITH ROLLUP前的属性名一定要在SELECT中呈现出来,如果只是GROUP BY就不一定要在SELECT中表现出来。

SELECTpm.name AS payment_method,SUM(p.amount) AS total
FROM payments p
JOIN payment_methods pm ON p.payment_method = pm.payment_method_id
GROUP BY pm.name WITH ROLLUP

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

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

相关文章

Linux网卡绑定mode参数解析

在Linux中,使用bonding(也称为Ethernet Channel Bonding)可以将多个物理网络接口(网卡)绑定成一个逻辑接口,以提供更高的网络带宽、冗余以及故障转移能力。mode参数决定了如何在这些物理接口间分配网络流量…

React常见的一些坑

文章目录 两个基础知识1. react的更新问题, react更新会重新执行react函数组件方法本身,并且子组件也会一起更新2. useCallback和useMemo滥用useCallback和useMemo要解决什么3. react的state有个经典的闭包,导致拿不到最新数据的问题.常见于useEffect, useMemo, useCallback4. …

【激光雕刻机上位机的成品软件】核心功能 - 参考wecreat

Software | WeCreat MakeIt! https://wecreat.com/pages/software 体验软件如上,自行下载体验。 价格5W,本人为 wecreat 创立之初上位机软件开发的核心员工,详细内容私信我。 由于该公司快3个月未给我竞业补偿了,对我不仁那我…

Anaconda创建python环境默认C盘,如何修改路径

文章目录 前言解决方案1.找到Anaconda的根目录2. 找到根目录文件夹,右键-属性-安全 测试-重新创建新的python环境 前言 使用 Anaconda创建python环境,默认在C盘。 如何修改到别的路径呢? base环境 是安装 Anaconda是安装的默认环境&#x…

Python3 函数参数

前言 本文主要介绍python中的函数参数,主要内容包括形式参数与实际参数的概念、位置参数、关键字参数、默认参数、可变参数。 文章目录 前言一、形式参数与实际参数的概念二、位置参数(也叫必需参数)三、关键字参数四、默认参数五、可变参数…

设计模式——结构型模式——责任链模式

责任链模式简介 责任链模式,又名职责链模式,为了避免请求发送者与多个请求处理者耦合在一起,将所有请求处理者通过前一对象记住其下一个对象的引用而成一条链;当有请求发生时,可将请求沿着这条链传递,传递过…

python dlib 面部特征点检测

运行环境macos m2芯片 Python 3.11.7,python3.9都能通过,windows系统应该也是一样的效果 import dlib import cv2 import matplotlib.pyplot as plt# Load the image image_path path_to_your_image.jpg # Replace with the path to your image image…

【Qt】【模型视图架构】代理模型

文章目录 代理模型简单介绍QSortFilterProxyModel类简单介绍排序过滤子类化 代理模型简单介绍 代理模型的作用是可以将一个模型中的数据进行排序或者过滤,然后提供给视图进行显示。 如下所示,创建一个源模型、一个代理模型,界面上创建一个列…

QT 信号和槽 一对多关联示例,一个信号,多个槽函数响应,一个信号源如何绑定多个槽函数

在窗体里放置一个单行文本编辑控件(QLineEdit)、一个标签控件(QLabel)和一个文本浏览控件(QTextBrowser),在单行文 本编辑控件里的文本被编辑时,标签控件和文本浏览控件都会同步显示…

网安速成之选择题(详细解析版)

网安速成之选择题 单选多选 单选 密码学的目的是( C )。 A. 研究数据压缩 B. 研究数据解密 C. 研究数据保密 D. 研究漏洞扫描 密码学的目的是研究数据加密,保证数据的机密性 数据机密性安全服务的基础是( D )。 A. 数…

C++ 的 Tag Dispatching(标签派发) 惯用法

目录 1.概述 2.标准库中的例子 3.使用自己的 Tag Dispatching 3.1.使用 type traits 技术 3.2.使用 Type_2_Type 技术 4.Tag Dispatching的使用场景 5.总结 1.概述 一般重载函数的设计是根据不同的参数决定具体做什么事情,编译器会根据参数匹配的原则确定正确…

面试题 - Java基础个人总结

1、Java语言特点/优势 1.1、什么是面向对象编程 2、Java的八种基本数据类型 2.1、为什么要有基本数据类型的封装类 2.2、Java自动装箱和拆箱 笔试题-1 笔试题-2 2.3、为什么浮点数运行时,会有丢失精度的风险? 2.4、补充知识: 3、重载…

WP All Import插件

使用 WP All Imports 插件并将亚马逊产品集成到 WooCommerce 网站中。在您的网站上,他们可以添加到购物车...然后一旦他们按下结帐,他们就会被发送到亚马逊进行付款 WP All Import 是一个强大的WordPress插件,它允许用户从XML或CSV文件中导入…

封装uview-plus上传组件up-upload,支持v-model绑定

痛点 vue上传组件拿到了一般无法直接使用,需要对其上下传的接口按照业务进行处理及定制。本次拿到的uview-plus也是一样,对其上传组件up-upload进行封装,令其更方便开发 目标 封装希望达到的目标,就是实现v-model的绑定。令其支…

字符串-将str1编辑成str2所需最小代价(hard)

一、题目描述 二、解题思路 该题目使用动态规划的思想来解决问题 刚开始我还在想,删除添加的操作可以等价为替换操作,如果替换操作的Cost大于删除添加组合操作的Cost之和就需要把 rcdcic。 但是在动态规划中,如果对三种不同的操作方式进行…

【Centos7】解决 CentOS 7 中出现 “xx: command not found“ 错误的全面指南

【Centos7】初探xx:command not found解决方案 大家好 我是寸铁👊 【Centos7】解决 CentOS 7 中出现 “xx: command not found” 错误的全面指南✨ 喜欢的小伙伴可以点点关注 💝 前言 经常有小伙伴问我,xx:command not found怎么办&#xff1…

Spring原理-IOC和AOP

概述 在此记录spring的学习内容。spring官网:https://spring.io/ 概念故事 从前,在Java的大森林中,有一片神奇的土地,名叫"Spring"。这片土地上生长着各种美丽而强大的植物,它们分别象征着Spring框架中的…

1.1 寻找灵感:怎样像艺术家一样去看待这个世界

“你是从哪里获取到这些创作灵感的?” 当每一个艺术家被问到这个问题时,只有诚实的艺术家会回答: “这是我偷窃的” 怎样像艺术家一样去看待这个世界呢? 你首先需要弄明白什么是值得你偷窃的,然后你才能继续接下来…

如何在一台电脑上安装多个版本的JDK并且切换使用?

如何在一台电脑上安装多个版本的JDK并且切换使用? 文章目录 如何在一台电脑上安装多个版本的JDK并且切换使用?1.目录管理2.下载JDK3.配置环境变量4. 验证 1.目录管理 我们需要首先对不同版本的JDK进行版本管理,如下所示,我在C盘路…

# linux 系统下 切换 root 用户时出现 authentication failure 的解决办法

linux 系统下 切换 root 用户时出现 authentication failure 的解决办法 1、问题分析: 切换 root 用户时出现 authentication failure,意思即 “身份验证失败”,这是由于新安装的系统,可能没有给 root 用户设置密码。 2、解决方…