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

GROUP BY、UNION和COALESCE协作

假设你是一家电商公司的数据分析师,老板需要一份产品销售报告:

  • 统计所有商品的销量

  • 商品分为两类:标准商品(有固定规格)和定制单品(特殊订单)

  • 数据来自不同的数据库表

  • 需要处理可能存在的空值问题

这个看似简单的需求,实际上需要用到SQL中的三个核心功能:GROUP BYUNIONCOALESCE

第一章:GROUP BY - 数据分组

什么是分组?为什么需要分组?

想象你是一个超市经理,面对满满一仓库的商品:

  • 你需要知道每种商品的库存总量

  • 而不是每个单独商品的库存

这就是分组的核心思想:将相似的数据归为一组,然后进行统计计算

GROUP BY基础用法

-- 统计每个部门的员工数量
SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department;
departmentemployee_count
技术部15
销售部20
财务部8

GROUP BY进阶用法

-- 统计每个部门、每个职级的平均工资
SELECT department,job_level,AVG(salary) AS avg_salary
FROM employees
GROUP BY department, job_level;

GROUP BY常见错误

-- 错误示例:SELECT包含了未在GROUP BY中的列
SELECT name, department, AVG(salary)
FROM employees
GROUP BY department; -- 错误!name不在GROUP BY中

黄金法则:SELECT中的非聚合列必须出现在GROUP BY子句中

第二章:UNION - 数据合并

UNION vs UNION ALL

假设你有两个客户名单:线上客户和线下客户

-- 合并客户列表(去重)
SELECT name, email FROM online_customers
UNION
SELECT name, email FROM offline_customers;-- 合并客户列表(不去重)
SELECT name, email FROM online_customers
UNION ALL
SELECT name, email FROM offline_customers;

UNION使用规则

  1. 每个SELECT语句必须有相同数量的列

  2. 对应列必须有兼容的数据类型

  3. 列名可以不同,但最终结果使用第一个SELECT的列名

UNION实际应用场景

-- 合并销售数据:标准商品 + 定制单品
SELECT '标准商品' AS type, product_id, SUM(quantity) AS total_sales
FROM standard_orders
GROUP BY product_idUNION ALLSELECT '定制单品' AS type, custom_id, SUM(quantity) AS total_sales
FROM custom_orders
GROUP BY custom_id;

第三章:COALESCE - 空值处理

为什么需要处理空值?

在数据库中,NULL表示"未知"或"不存在"。但实际应用中:

  • NULL与0不同

  • NULL参与计算会导致结果变为NULL

  • 用户界面显示NULL不友好

COALESCE基础用法

-- 返回第一个非空值
SELECT name,COALESCE(middle_name, '无') AS middle_name,COALESCE(phone, email, '无联系方式') AS contact
FROM customers;

COALESCE高级技巧

-- 解决ID冲突问题
SELECT COALESCE(standard_id, custom_id + 1000000) AS unified_id
FROM products;-- 处理多种可能的空值情况
SELECT product_id,COALESCE(special_price, member_price, regular_price * 0.9, 0) AS final_price
FROM pricing;

结语:SQL三剑客的强大组合

通过本文的学习,你应该已经掌握:

  • GROUP BY:分组统计的核心工具

  • UNION:数据合并的桥梁

  • COALESCE:空值处理的瑞士军刀

这三个功能的组合可以解决实际工作中80%的复杂数据统计需求。记住:

"掌握基础工具的组合应用,比学习高级技巧更重要"

终极小抄

场景解决方案
分类统计GROUP BY
合并多源数据UNION ALL
处理空值/默认值COALESCE
解决ID冲突COALESCE + 偏移量
复杂数据汇总GROUP BY + UNION ALL + COALESCE
http://www.lqws.cn/news/514189.html

相关文章:

  • 电商导购app平台的缓存策略与性能优化方案:架构师的实践经验
  • 【番外篇】TLS指纹
  • 4.1 ROS颜色目标识别与定位
  • 【大厂机试题解法笔记】分解连续正整数组合/ 分解正整数
  • 探索解析C++ STL中的 list:双向链表的高效实现与迭代器
  • 领域驱动设计(DDD)【13】之重构中的坏味道:深入理解依恋特性(Feature Envy)与表意接口模式
  • 没有VISA怎么注册AWS?
  • Flutter - 原生交互 - 相册
  • C语言基础回顾与Objective-C核心类型详解
  • QT 学习笔记摘要(三)
  • 每日AI资讯速递 | 2025-06-25
  • TDengine 的 CASE WHEN 语法技术详细
  • 磐维数据库PanWeiDB V2.0-S3.1.1_B01集中式一主二备安装
  • linux安装docker
  • Android14音频子系统-ASoC-ALSA之DAPM电源管理子系统
  • ISO/IEC 27001:2022 資訊安全管理系統 Information Security Management System , ISMS
  • elementui修改radio字体的颜色和圆圈的样式
  • centos7网络不可达connect: network is unreachable
  • 【JVS更新日志】物联网、智能排产APS、企业计划、规则引擎6.25更新说明!
  • 华为云Flexus+DeepSeek征文|基于Dify构建智能情感分析Agent全流程
  • MiniMax-M1混合MoE大语言模型(本地运行和私有化搭建)
  • 【零基础学AI】第3讲:Git版本控制基础
  • Java项目RestfulAPI设计最佳实践
  • 深入剖析:Spring Boot系统开发的高效之道
  • T-BOX 革新:ASR1606 LTE Cat.1 联合 SD NAND MKDV1GIL-AST 的优势剖析
  • 签名组件:uniapp 签名组件开发,兼容小程序、H5、App等 电子签名
  • Python DuckDB 详解:轻量级分析型数据库的革新实践
  • 学习昇腾开发的第8天
  • 通用 Excel 导出功能设计与实现:动态列选择与灵活配置
  • 鸿蒙ArkUI---基础组件Tabs(Tabbar)