当前位置: 首页 > article >正文

MySQL中的分组统计

在数据库操作中,我们经常需要对数据进行分组统计,以便更好地分析和理解数据。MySQL提供了强大的分组和聚合函数,使得这一任务变得简单而高效。今天,我们将通过一个具体的SQL查询示例,深入探讨如何在MySQL中进行分组统计。

SQL查询示例

首先,让我们来看一个具体的SQL查询语句:

SELECT
    IFNULL(SUM(s.total_amount), 0) AS totalAmount,
    IFNULL(SUM(s.total_amount), 0) - IFNULL(SUM(s.invoice_amount), 0) AS totalWeight 
FROM
    (
    SELECT
        t.id,
        t.total_amount,
        t.invoice_amount 
    FROM
        contract_purchase_info t
        LEFT JOIN contract_info_detail scid ON t.order_sn = scid.purchaser_order_sn 
        LEFT JOIN invoice_detail sid ON t.order_sn = sid.purchase_order_sn 
        AND (sid.business_type = 0 OR sid.business_type IS NULL) 
        LEFT JOIN invoice_info sii ON sid.invoice_id = sii.id 
    WHERE
        t.`status` = 1 
    GROUP BY
        t.id 
    ) AS s

分析查询

1. 子查询

这个查询首先定义了一个子查询,用于从contract_purchase_info表中选择数据,并与contract_info_detailinvoice_detailinvoice_info表进行左连接。连接条件是基于订单号(order_sn)和业务类型(business_type)。

  • LEFT JOIN:左连接确保了即使在右表中没有匹配的行,左表中的行也会被包含在结果中。
  • WHERE子句:过滤条件t.status = 1确保了只选择状态为1的记录。

2. 分组

在子查询中,使用了GROUP BY t.id来对结果进行分组。这意味着对于每个唯一的id,其total_amountinvoice_amount将被聚合。

3. 聚合函数

  • SUM(s.total_amount):计算每个组的total_amount字段的总和。
  • SUM(s.invoice_amount):计算每个组的invoice_amount字段的总和。

4. 条件聚合

  • IFNULL函数:用于处理可能的NULL值。如果SUM的结果为NULL,则IFNULL函数将其转换为0。

5. 计算总重量

  • totalWeight:通过从total_amount中减去invoice_amount来计算。这可能表示了某种类型的净额或剩余金额。

总结

这个查询是一个典型的分组统计示例,展示了如何在MySQL中使用子查询、连接、分组和聚合函数来处理复杂的数据集。


http://www.kler.cn/a/289037.html

相关文章:

  • 如何在CentOS 7上搭建SMB服务
  • 学习日志010--python异常处理机制与简单文件操作
  • 【云原生系列--Longhorn的部署】
  • uniapp在app模式下组件传值
  • 基于微信小程序的农场管理系统的设计与实现,LW+源码+讲解
  • neo4j desktop基本入门
  • 云计算环境下的数据治理
  • 学习之git
  • 算法设计:实验二贪心算法
  • wget下载速度受到哪些因素影响?
  • MySQL:简述多版本并发控制MVCC
  • 无人机之电池篇
  • Python与R的完美协作:深入解析subprocess模块调用R脚本的参数传递机制
  • 安装WMware和Ubuntu并使用xShell连接
  • Map排序与转换的深入探索:Java与Kotlin的实现与应用
  • 宝兰德多款仓颉开源项目获GitCode官方G-Star毕业认证,释放开发效率新动能
  • 将军百战死,程序十年成
  • Spring Cloud Eureka与Kubernetes的集成:服务发现的混合方案
  • YOLO-World: Real-Time Open-Vocabulary Object Detection:实时开放词汇对象检测
  • QT教程-十七,QTextBrowser
  • dnsperf测试dns性能
  • 春秋云镜initial
  • c++----杨辉三角(补充)
  • 学懂C++(五十一): C++ 陷阱:详解多重继承与钻石继承引发的二义性问题
  • 上门家政系统源码开发详解
  • 界面控件Telerik UI for ASP.NET Core 2024 Q2亮点 - AI与UI的融合