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

SQL count(*)与 sum 区别

这是一个非常经典的SQL面试题。COUNT(*) 和 SUM() 是两个最常用的聚合函数,但它们的用途和计算方式有本质的区别。


简单来说,最核心的区别是:

  • COUNT(*) 统计的是行的数量。

  • SUM(column) 统计的是某列具体数值的总和。

下面我们通过一个详细的对比和例子来彻底搞清楚。


核心区别对比表

特性COUNT(*)SUM(column)
计算对象 (不管行里的内容是什么) (列中具体的数值)
返回值一个整数,表示满足条件的记录总数。一个数值,表示指定列所有值的总和。
对 NULL 的处理忽略 NULLCOUNT(*) 甚至对全是 NULL 的行也会计数,因为它数的是行。COUNT(column) 会忽略该列中为 NULL 的行。忽略 NULL。如果某行的该列值为 NULL,这行不会被加入总和。
常用场景统计总用户数、总订单数、总记录数。计算总销售额、总分数、总库存量。

举例说明

假设我们有一个 sales 表,记录了销售数据:

order_idproductquantityprice
1Apple52.5
2Banana101.2
3OrangeNULL3.0
4Mango84.5
5NULL2NULL

现在我们来执行不同的查询:

1. 使用 COUNT(*)
SELECT COUNT(*) AS total_orders FROM sales;

结果: 5
解释: 统计的是表中有多少行记录,共5行。它不关心任何列的具体值,即使整行都是 NULL(如第5行)也会被计数。

2. 使用 COUNT(column)
SELECT COUNT(product) AS product_count FROM sales;

结果: 4
解释: 统计 product 列中非 NULL 值的数量。第5行的 product 是 NULL,所以被忽略。

SELECT COUNT(quantity) AS quantity_count FROM sales;

结果: 4
解释: 统计 quantity 列中非 NULL 值的数量。第3行的 quantity 是 NULL,所以被忽略。

3. 使用 SUM(column)
SELECT SUM(quantity) AS total_quantity FROM sales;

结果: 25 (即 5 + 10 + 8 + 2)
解释: 计算 quantity 列所有非 NULL 值的总和。第3行的 NULL 被忽略,其他四行的值相加:5 + 10 + 8 + 2 = 25。

SELECT SUM(price) AS total_revenue FROM sales;

结果: 11.2 (即 2.5 + 1.2 + 3.0 + 4.5)
解释: 计算 price 列所有非 NULL 值的总和。第5行的 NULL 被忽略,其他四行的值相加。


一个综合查询展示所有区别

SELECTCOUNT(*) AS total_rows,COUNT(product) AS non_null_products,COUNT(quantity) AS non_null_quantities,SUM(quantity) AS total_quantity_sold,SUM(price) AS total_revenue
FROM sales;

结果:

total_rowsnon_null_productsnon_null_quantitiestotal_quantity_soldtotal_revenue
5442511.2

总结与记忆技巧

  • 数东西用 COUNT: 你想知道“有多少个?”(例如,有多少个订单?多少个用户?)就用 COUNT

  • 加数字用 SUM: 你想知道“总共是多少?”(例如,总共卖了多少钱?总共买了多少件?)就用 SUM

  • 牢记 NULL: 这两个函数在绝大多数数据库中都自动忽略 NULLCOUNT(*) 除外),这是最需要注意的一点,也常常是面试考点。

  • COUNT(1) 和 COUNT(*): 在功能上,COUNT(1) 和 COUNT(*) 没有区别,它们都是统计行数。COUNT(1) 中的 1 只是一个常量,表示对每一行都输出一个1,然后计算有多少个1。现代数据库优化器对它们的处理效率是一样的。

http://www.lryc.cn/news/627017.html

相关文章:

  • 第三阶段数据-4:SqlHelper类,数据库删除,DataTable创建
  • STM32F4 内存管理介绍及应用
  • 建模工具Sparx EA的多视图协作教程
  • PyTorch - Developer Notes
  • 吴恩达 Machine Learning(Class 3)
  • 国产化PDF处理控件Spire.PDF教程:如何使用 Python 添加水印到 PDF
  • Linux命令大全-ps命令
  • Linux系统之部署nullboard任务管理工具
  • 基于springboot中学信息技术课程教学网站
  • 栈上创建和堆上创建区别
  • Nginx 的完整配置文件结构、配置语法以及模块详解
  • 设计模式1-单例模式
  • 继续记事本项目
  • 盲盒商城h5源码搭建可二开幸运盲盒回收转增定制开发教程
  • Hyperledger Fabric官方中文教程-改进笔记(十三)-使用测试网络创建通道
  • Google Chrome 扩展不受信任 - 不受支持的清单版本 解决方案
  • 整体设计 之定稿 “凝聚式中心点”原型 --整除:智能合约和DBMS的在表层挂接 能/所 依据的深层套接
  • AR 虚实叠加技术在工业设备运维中的实现流程方案
  • 云原生环境下的ITSM新趋势:从传统运维到智能化服务管理
  • MySQL 50 道经典练习题及答案
  • YOLOv8n-pose 模型使用
  • 学习中需不需要划线、做笔记
  • LLM常见名词记录
  • 【0基础PS】图片格式
  • 奇怪的“bug”--数据库的“隐式转换”行为
  • 深入解析:生产环境 SQL 数据库的架构设计与工程实践
  • 【clion】visual studio的sln转cmakelist并使用clion构建32位
  • 深入理解MySQL Ⅳ -- SQL性能分析工具
  • 欧州服务器String 转 double 有BUG?
  • skyworking 8.9.X 安装配置