【SQL】掌握SQL查询技巧:数据分组与排序

news/2024/10/11 17:59:38/

目录

  • 1. GROUP BY
    • 1.1 定义与用途
    • 1.2 示例说明
    • 1.3 注意事项
    • 1.4 可视化示例
  • 2. ORDER BY
    • 2.1 定义与用途
    • 2.2 升序说明(默认)
    • 2.3 降序排序
    • 2.4 多列排序
    • 2.5 可视化示例
  • 3. GROUP BY 与 ORDER BY 的结合使用
  • 4. 可视化示例
  • 总结

数据库管理中,SQL(结构化查询语言)是一个强大的工具,它允许用户从数据库中提取和操作数据。对数据的有效处理通常需要进行分组和排序操作。在这篇博客中,我们将深入讨论 SQL 中的 GROUP BYORDER BY 子句,帮助你更好地理解如何使用这些功能来组织和排序你的数据。

1. GROUP BY

1.1 定义与用途

GROUP BY 子句用于将来自 SELECT 查询的数据行分组,通常与聚合函数(如 COUNTSUMAVGMAXMIN)一起使用,以便对每个组执行计算。这种分组使我们能够对数据进行汇总分析,提取有用的信息。

1.2 示例说明

假设我们有一个名为 sales 的表,其中包含以下数据:

idproductquantitypricesale_date
1Apple101.002024-01-01
2Banana200.502024-01-02
3Apple151.002024-01-03
4Banana250.502024-01-04
5Cherry302.002024-01-05

现在,如果我们想要统计每种水果的总销售数量,可以使用如下 SQL 查询:

sql">SELECT product, SUM(quantity) AS total_quantity
FROM sales
GROUP BY product;

解释

  • SELECT product:选择产品名称。
  • SUM(quantity) AS total_quantity:对每种产品的销售数量求和,并命名为 total_quantity
  • FROM sales:指定数据源表。
  • GROUP BY product:按 product 列对结果进行分组。

输出结果

producttotal_quantity
Apple25
Banana45
Cherry30

1.3 注意事项

  • 非聚合字段:当使用 GROUP BY 时,SELECT 子句中的所有非聚合列必须在 GROUP BY 子句中列出,否则会导致错误。

    sql">-- 错误示例:无法只返回 product 列而不 GROUP BY price
    SELECT product, price, SUM(quantity)
    FROM sales
    GROUP BY product; -- 会导致错误
    
  • NULL 值处理:在进行分组时,NULL 值会被视为同一组。

1.4 可视化示例

通过以下可视化图示,可以更直观地理解 GROUP BY 的工作原理。

Group By: Product
Sum Quantities
CSDN @ 2136
Sales Table
Grouped Data
Aggregated Results
CSDN @ 2136
  • Sales Table:原始数据表,包含所有销售记录。
  • Grouped Data:通过 GROUP BY 将数据按产品分组。
  • Aggregated Results:应用聚合函数(如 SUM),计算每种产品的总销售数量。

2. ORDER BY

2.1 定义与用途

ORDER BY 子句用于对查询结果进行排序。默认情况下,排序是升序的,但可以使用 DESC 关键字指定降序排序。这有助于用户根据特定的需求查看数据。

2.2 升序说明(默认)

继续使用上述 sales 表,假设我们想按销售日期对销售记录进行排序,可以使用如下 SQL 查询:

sql">SELECT *
FROM sales
ORDER BY sale_date ASC;

解释

  • SELECT *:选择所有列。
  • FROM sales:指定数据源表。
  • ORDER BY sale_date ASC:按 sale_date 列升序排序。

输出结果

idproductquantitypricesale_date
1Apple101.002024-01-01
2Banana200.502024-01-02
3Apple151.002024-01-03
4Banana250.502024-01-04
5Cherry302.002024-01-05

2.3 降序排序

如果想按销售数量降序排序,可以使用:

sql">SELECT *
FROM sales
ORDER BY quantity DESC;

解释

  • ORDER BY quantity DESC:按 quantity 列降序排序。

输出结果

idproductquantitypricesale_date
5Cherry302.002024-01-05
4Banana250.502024-01-04
3Apple151.002024-01-03
2Banana200.502024-01-02
1Apple101.002024-01-01

2.4 多列排序

你可以使用多个列进行排序。例如,首先按产品名称升序,然后按销售数量降序:

sql">SELECT *
FROM sales
ORDER BY product ASC, quantity DESC;

解释

  • ORDER BY product ASC, quantity DESC:按 product 列升序,若有相同的产品再按 quantity 降序排序。

输出结果示例

idproductquantitypricesale_date
1Apple101.002024-01-01
3Apple151.002024-01-03
2Banana200.502024-01-02
4Banana250.502024-01-04
5Cherry302.002024-01-05

2.5 可视化示例

通过以下可视化图示,可以更直观地理解 ORDER BY 的工作原理。

Order By: Sale Date
CSDN @ 2136
Sales Table
Sorted Data
CSDN @ 2136
  • Sales Table:原始数据表,包含所有销售记录。
  • Sorted Data:通过 ORDER BY 对数据进行排序,得到有序的销售记录。

3. GROUP BY 与 ORDER BY 的结合使用

我们可以将 GROUP BYORDER BY 结合起来,首先对数据进行分组,然后对结果进行排序。例如,统计每种水果的总销售数量,并按数量降序排列:

sql">SELECT product, SUM(quantity) AS total_quantity
FROM sales
GROUP BY product
ORDER BY total_quantity DESC;

解释

  • SUM(quantity) 计算每种水果的销售总量。
  • ORDER BY total_quantity DESC 将结果按总销售数量降序排序。

输出结果

producttotal_quantity
Banana45
Cherry30
Apple25

4. 可视化示例

通过以下可视化图示,可以更直观地理解 GROUP BYORDER BY 的工作原理。这里使用 Mermaid 图形描述工具来展示数据流向和处理过程。

Group By: Product
Sum Quantities
Order By: Total Quantity Desc
CSDN @ 2136
Sales Table
Grouped Data
Aggregated Results
Final Sorted Results
CSDN @ 2136

图示解读

  • Sales Table:原始数据表,包含所有销售记录。
  • Grouped Data:通过 GROUP BY 将数据按产品分组。
  • Aggregated Results:应用聚合函数(如 SUM),计算每种产品的总销售数量。
  • Final Sorted Results:通过 ORDER BY 对聚合后的结果进行排序,最终得到按销售数量排序的结果。

总结

通过掌握 GROUP BYORDER BY 子句,你可以有效地分析和整理 SQL 查询的结果。无论是进行数据汇总还是结果排序,这两者都是数据分析中不可或缺的工具。理解它们的用法可以帮助你更快速、高效地处理和分析数据。

希望本文能帮助你更好地理解和应用 SQL 查询技巧!如有任何问题或需要进一步的示例,请随时留言!



http://www.ppmy.cn/news/1537560.html

相关文章

vue-cli老项目继续优化:json压缩神器 compress-json

前言 上文讲到一个 vue-cli 带脚本生成内容的老项目的打包时间已经从 40min ,优化到 12min ,再到 9min 。 还有可以考虑的方式包含缩小脚本体积、依赖分包、构建的缓存等等。 那么本文就来讨论缩小脚本体积的方式。 分析 前文已知,生成的…

Linux CentOS stream9配置本地yum源

在Linux系统中,yum源配置是一个重要的环节。把系统安装时配置的国外yum源转换为国内yum源,能够帮助系统快速安装软件包。对于网络环境不稳定或无法联网的系统,配置本地yum源,可以让用户在离线状态下也能进行软件包的安装,十分重要。 一、国内源 在使用Linux的日常工作中…

i18n多语言项目批量翻译工具(支持84种语言)

这里写自定义目录标题 打开‘i18n翻译助手’小程序快捷访问 打开‘i18n翻译助手’小程序 1.将需要翻译的json文件复制到输入框(建议一次不要翻译过多,测试1000条以内没什么问题) 2.等待翻译 3.翻译完成,复制结果 快捷访问

【网络安全】CVE-2024-46990: Directus环回IP过滤器绕过实现SSRF

未经许可,不得转载。 文章目录 背景漏洞详情受影响版本解决方案背景 Directus 是一款开源 CMS,提供强大的内容管理 API,使开发人员能够轻松创建自定义应用程序,凭借其灵活的数据模型和用户友好的界面备受欢迎。然而,Directus 存在一个漏洞,允许攻击者绕过默认的环回 IP …

day 20 二叉树 part05

654.最大二叉树 注意类似用数组构造二叉树的题目,每次分隔尽量不要定义新的数组,而是通过下标索引直接在原数组上操作,这样可以节约时间和空间上的开销。 题目链接/文章讲解:代码随想录 lass Solution { private:// 在左闭右开…

前端接收到的日期格式为 2021-12-07T16:44:53.298+00:00 怎么办?

在写项目的时候,给前端发送了一个 Date 类型的数据,发现格式不对: 可以通过在application 配置文件中进行如下配置: spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT8 前端在获取就发现格式正确

[Linux]从零开始的网站内网穿透教程

一、前言 在上一次教程中,我们教了大家如何搭建一个网站并且在内网中能被访问到。这样也出现了一个问题,我们的网站被我们部署得再好看,始终只有内网中的设备可以访问。如果别人和我们不在一个局域网中,就无法访问我们搭建的网站了…

Gin项目的初始化步骤和常见错误记录

相信很多人对Go的环境安装和Gin项目的初始化都已经手拿把攥很是熟练了,本节介绍一个自己新建Go项目时非常好用的设置以及记录一下Gin项目的初始化过程和常能遇到的错误。 一个容易忽略的Go ENV 在安装了Go的电脑中,我们可以在命令行执行 go env 命令&…