【Java 进阶篇】深入理解 SQL 分组查询

在这里插入图片描述

SQL 是结构化查询语言(Structured Query Language)的缩写,是用于管理关系型数据库的标准语言。在 SQL 中,查询是其中最重要的部分之一,通过查询,我们可以从数据库中检索所需的数据。分组查询是 SQL 查询中的一项重要功能,它允许我们对数据进行分组、聚合和汇总,以便更好地理解数据的特征和趋势。

在本文中,我们将深入探讨 SQL 中的分组查询,包括其基本语法、常用聚合函数、分组筛选条件、多重分组、分组排序等方面的内容。无论您是初学者还是有一定 SQL 基础的开发者,都将从本文中获得有关 SQL 分组查询的详细信息。

什么是分组查询?

分组查询是 SQL 中的一种数据汇总技术,它将数据库中的数据按照一个或多个列的值进行分组,然后对每个分组应用聚合函数来计算汇总结果。这有助于将大量的数据按照某种特定的标准进行分类和汇总,以便更好地理解数据的分布和特征。

分组查询通常用于回答如下问题:

  • 数据分布:某个列中各个值的分布情况是怎样的?
  • 统计信息:对某个列的数值进行统计,如求和、平均值、最大值、最小值等。
  • 数据透视:将数据按照不同的维度进行切割和聚合,以便进行多维度的分析。
  • 数据筛选:对数据进行筛选,只选择符合条件的数据行。
  • 数据排序:按照某个列或多个列的值对数据进行排序。

接下来,让我们一起学习 SQL 分组查询的基本语法和用法。

基本语法

SQL 分组查询的基本语法如下所示:

SELECT1,2, 聚合函数(3)
FROM 表名
GROUP BY1,2
HAVING 条件

让我们逐步解释每个部分的含义:

  • SELECT 语句:用于选择要显示的列,可以是分组列、聚合函数或其他列。
  • FROM 子句:指定要查询的表名。
  • GROUP BY 子句:指定一个或多个列,用于分组数据。查询的结果将按照这些列的值进行分组。
  • 聚合函数:对于每个分组,可以应用一个或多个聚合函数(如 SUMAVGCOUNTMAXMIN 等)来计算汇总值。
  • HAVING 子句:可选的,用于筛选分组后的结果。只有符合条件的分组才会被包括在结果中。

下面我们通过具体的示例来演示分组查询的用法。

示例:分组查询的基本用法

假设我们有一个名为 orders 的表,记录了一家网上商店的订单信息。表的结构如下:

order_idcustomer_idorder_datetotal_amount
11012022-01-1050.00
21022022-01-1230.00
31012022-01-1520.00
41032022-01-2060.00
51022022-01-2540.00

现在,我们希望进行一些分组查询,以便更好地了解订单数据。

1. 查找每位客户的订单数量和总金额

要实现这个查询,我们可以按照客户ID进行分组,然后使用聚合函数计算每位客户的订单数量和总金额。以下是查询的SQL语句:

SELECT customer_id, COUNT(order_id) AS order_count, SUM(total_amount) AS total_sum
FROM orders
GROUP BY customer_id;

在这个查询中,我们选择了 customer_id 列作为分组的依据,并使用 COUNT 函数计算每位客户的订单数量,使用 SUM 函数计算每位客户的订单总金额。结果如下:

customer_idorder_counttotal_sum
101270.00
102270.00
103160.00

这个结果告诉我们,客户 101 和 102 分别有两个订单,总金额分别为 70.00,客户 103 有一个订单,总金额为 60.00。

2. 查找订单总金额超过 50.00 的客户

要筛选出订单总金额超过 50.00 的客户,我们可以使用 HAVING 子句来筛选分组后的结果。以下是查询的SQL语句:

SELECT customer_id, SUM(total_amount) AS total_sum
FROM orders
GROUP BY customer_id
HAVING SUM(total_amount) > 50.00;

这个查询首先按客户ID分组,然后使用 SUM 函数计算每位客户的订单总金额。最后,我们使用 HAVING 子句筛选出总金额大于 50.00 的客户。结果如下:

customer_idtotal_sum
10170.00
10270.00

这个结果显示了总金额大于 50.00 的客户是客户 101 和 102,它们各自的订单总金额为 70.00。

3. 查找每日订单数量和总金额

如果我们希望查找每天的订单数量和总金额,可以按照 order_date 列进行分组,并使用聚合函数计算。以下是查询的SQL语句:

SELECT order_date, COUNT(order_id) AS order_count, SUM(total_amount) AS total_sum
FROM orders
GROUP BY order_date;

在这个查询中,我们选择了 order_date 列作为分组的依据,然后使用 COUNT 函数计算每日的订单数量,使用 SUM 函数计算每日的订单总金额。结果如下:

order_dateorder_counttotal_sum
2022-01-10150.00
2022-01-12130.00
2022-01-15120.00
2022-01-20160.00
2022-01-25140.00

这个结果显示了每日的订单数量和总金额,从而帮助我们了解了订单的分布情况。

多重分组

除了单一列的分组,我们还可以进行多重分组,即按照多个列的值进行分组。这样可以更细粒度地组织数据,获得更详细的分析结果。

以下是一个多重分组的示例查询,我们将按照客户ID和订单日期进行分组:

SELECT customer_id, order_date, COUNT(order_id) AS order_count, SUM(total_amount) AS total_sum
FROM orders
GROUP BY customer_id, order_date;

这个查询将会按照客户ID和订单日期进行分组,并计算每位客户每天的订单数量和总金额。多重分组可以帮助我们更清晰地了解客户的购买习惯以及每日订单情况。

分组排序

有时候,我们希望对分组后的结果进行排序,以便更容易地查看数据。可以使用 ORDER BY 子句来实现分组排序。

以下是一个示例查询,我们按照订单总金额降序排序客户的购买总金额:

SELECT customer_id, SUM(total_amount) AS total_sum
FROM orders
GROUP BY customer_id
ORDER BY total_sum DESC;

这个查询将结果按照 total_sum 列(即订单总金额)降序排序,以便查看购买总金额最高的客户。结果如下:

customer_idtotal_sum
10170.00
10270.00
10360.00

在这个结果中,我们可以看到购买总金额最高的客户是客户 101 和客户 102,它们的购买总金额都为 70.00。

总结

SQL 分组查询是对数据库中的数据进行分组、汇总和分析的重要工具。通过合理使用分组查询,我们可以轻松地回答各种关于数据分布、统计信息、数据透视和筛选等问题。在编写分组查询时,重要的是理解基本语法、聚合函数的应用和条件筛选的方法。

在实际应用中,分组查询通常与其他 SQL 查询语句结合使用,以便更全面地分析和报告数据。无论您是数据分析师、数据库管理员还是应用开发者,精通 SQL 分组查询都将是提高数据处理和分析能力的重要一步。

希望本文能够帮助您更好地理解 SQL 分组查询,并在实际工作中应用它来处理和分析数据库中的数据。如果您对 SQL 查询还有其他问题或需要进一步的帮助,请随时咨询或查阅相关文档。

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

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

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

相关文章

生命在于研究——CVE-2021-22214记录

一、前言 我现在在某央企驻场,渗透测试工程师,也负责漏洞管理平台,也就是监测、渗透测试出现的漏洞,都会录入平台,走流程整改复测办结。 二、漏洞详情 1、漏洞简介 GitLab存在前台未授权SSRF漏洞,未授权…

认识电磁干扰?|深圳比创达EMC

认识电磁干扰?相信不少人是有疑问的,今天深圳市比创达电子科技有限公司就跟大家解答一下! 1、电磁干扰(Electromagnetic Interference):简称EMI,有传导干扰和辐射干扰两种; 2、传导干扰:主要是…

win10录屏的3种方法,让你的视频更加精彩

在现代工作和娱乐中,录制屏幕活动已经变得非常重要。无论您是教育工作者、内容创作者还是想分享您的技能或游戏成就,win10 提供了多种方法来满足这个需求。本文将介绍3种win 10录屏的方法。无论您是初学者还是有经验的用户,我们都会为您提供详…

联盟 | 彩漩 X HelpLook,AI技术赋能企业效率提升

近日,AI 驱动的 PPT 协作分享平台「 彩漩 」与 AI 知识库搭建工具「 HelpLook」,携手为用户工作流注入更多智能和创造力,全面拥抱 AIGC 时代带来的机遇,致力于提供前沿的智能解决方案。 彩 漩 彩漩是一个以 AI 技术为基础、贯彻 …

自制网页。

文章目录 注:代码中图片等素材均来自网络,侵删 20230920_213831 index.html <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-…

Java当中的BIO模型

我们知道Java中的IO模型分为BIO和NIO模型&#xff0c;BIO是BlCKING IO的简称而NIO当中的N有两层意思&#xff0c;一个是从java1.4开始出现的NEW IO&#xff0c;今天我们来聊一聊为什么传统的BIO会慢以及它并不适合大量的连接&#xff0c;我们先来看一段简单的代码&#xff0c;这…

pt28django教程

缓存 缓存是一类可以更快的读取数据的介质统称&#xff0c;读取硬盘、较复杂的计算、渲染都会产生较大的耗时。数据变化频率不会很高的场景适合使用缓存。使用缓存场景&#xff1a;博客列表页、电商商品详情页、缓存导航及页脚。 Django中设置缓存 Django中提供多种缓存方式…

Mac电脑视频处理工具 Topaz Video AI for mac

Topaz Video AI是一款强大而易用的视频处理软件&#xff0c;通过人工智能技术提供高质量的视频增强和编辑功能。它可以帮助用户改善视频的质量、修复缺陷、优化图像&#xff0c;并提供丰富的编辑选项&#xff0c;以满足个性化的视频处理需求。无论是专业摄影师、视频编辑人员&a…

五、3d场景的卡片展示的创建

在我们3d的开发中&#xff0c;对某一些建筑和物体进行解释说明是非常常见的现象&#xff0c;那么就不得不说卡片的展示了&#xff0c;卡片展示很友好的说明了当前物体的状态&#xff0c;一目了然&#xff0c;下面就是效果图。 它主要有两个方法来实现&#xff0c;大量的图片建议…

maven找不到jar包

配置settings.xml文件之后出现报错找不到jar包 先改maven设置: 然后在重新清理构建项目: 可以通过执行以下命令清理本地 Maven 仓库 mvn dependency:purge-local-repository

渗透测试之打点

请遵守中华人民共和国网络安全法 打点的目的是获取一个服务器的控制权限 1. 企业架构收集 &#xff08;1&#xff09;官网 &#xff08;2&#xff09;网站或下属的子网站&#xff0c;依次往下 天眼查 企查查 2. ICP 备案查询 ICP/IP地址/域名信息备案管理系统 使用网站…

京东大型API网关实践之路

概述 1、背景 京东作为电商平台&#xff0c;近几年用户、业务持续增长&#xff0c;访问量持续上升&#xff0c;随着这些业务的发展&#xff0c;API网关应运而生。 API网关&#xff0c;就是为了解放客户端与服务端而存在的。对于客户端&#xff0c;使开放给客户端的接口标准统…

26342-2010 国际运尸 木质棺柩.

声明 本文是学习GB-T 26342-2010 国际运尸 木质棺柩. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了国际运尸木质棺柩的分类、规格、技术要求、检验方法、包装、运输和储存。 本标准适用于为国际运尸木质棺柩的设计、生产、检测…

第七天:gec6818开发板QT和Ubuntu中QT安装连接sqlite3数据库驱动环境保姆教程

sqlite3数据库简介 帮助文档 SQL Programming 大多数关系型数的操作步骤&#xff1a;1&#xff09;连接数据库 多数关系型数据库都是C/S模型 (Client/Server)sqlite3是一个本地的单文件关系型数据库&#xff0c;同样也有“连接”的过程 2&#xff09;操作数据库 作为程序员&am…

如何将matlab中的mat矩阵文件在python中读取出来

先安装hdf5storage这个包 pip3 install hdf5storage 然后在当前目录下放入要读取的mat文件 # 将matlab中的mat文件读取出来 import hdf5storagedata hdf5storage.loadmat(inputWeights.mat) print(data[inputWeights])

分布式搜索引擎Elasticsearch

一、Elasticsearch介绍 1.Elasticsearch产生背景 大数据量的检索NoSql: not only sql,泛指非关系型的数据库Nginx的7层负载均衡和4层负载均衡2.Elasticsearch是什么 一个基于Lucene的分布式搜索和分析引擎,一个开源的高扩展的分布式全文检索引擎 Elasticsearch使用Java开发…

RNN模型与NLP应用(1/9):数据处理基础Data Processing Basics

文章目录 处理分类特征把分类特征转化为数值特征应用one-hot编码indice要从1开始而不能从0开始数据处理为什么使用one-hot向量 处理文本数据Step1&#xff1a;将文本分割成单词Step2&#xff1a;计算单词的频度按频度递减的方式排序 Step3&#xff1a;One-Hot编码 处理分类特征…

Stm32_标准库_GPIOA初始化

代码&#xff1a; #include "stm32f10x.h" // Device headerGPIO_InitTypeDef GPIO_InitStructur;//定义变量结构体int main(void){/*使用RCC开启GPIO的时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//开启PA端口时钟/*使用GPIO_I…

黑马VUE3视频笔记

目录 一、使用create-vue创建项目 二、setup选项 三、reactive和ref函数 1.reactive() 2.ref() 三、computed 四、watch ​五、生命周期函数 六、父传子、子传父 父传子defineProps 子传父defineEmits 七、模板引用 ref defineExpose 八、跨层传递普通数据 prov…

JAXB(Java Architecture for XML Binding)下载、使用

简介 JAXB&#xff08;Java Architecture for XML Binding&#xff09;就是XML数据绑定的java架构。JAXB可以根据XML Schema生成java类&#xff0c;也能根据java类生成XML Schema&#xff0c;能将XML数据unmarshall到Java内容树&#xff0c;也能将Java内容树持久化为XML数据。…