GROUP BY按列分组数据,聚合函数对每组计算汇总值;WHERE在分组前筛选行,HAVING在分组后基于聚合结果筛选;NULL值被归为一组,多数聚合函数自动忽略NULL;多列分组时,数据库将所有分组列值相同的行划为一组。

SQL中的
GROUP BY
COUNT
SUM
AVG
MIN
MAX
要深入理解
GROUP BY
COUNT(*)
SUM(amount)
GROUP BY
它的基本语法是这样的:
SELECT
列1,
聚合函数(列2)
FROM
表名
WHERE
条件
GROUP BY
列1
HAVING
分组后的条件
ORDER BY
排序字段;这里,
GROUP BY 列1
列1
SELECT
举个例子,假设我们有一个
Orders
CustomerID
OrderAmount
SELECT
CustomerID,
SUM(OrderAmount) AS TotalSpent
FROM
Orders
GROUP BY
CustomerID;这条语句会先根据
CustomerID
CustomerID
OrderAmount
我个人觉得,理解
GROUP BY
GROUP BY
WHERE
GROUP BY
这个问题,我遇到过太多初学者甚至一些有经验的开发者都会搞混。简单来说,
WHERE
HAVING
WHERE
WHERE
GROUP BY
SELECT
比如,我们只想统计2023年之后订单的客户总消费:
SELECT
CustomerID,
SUM(OrderAmount) AS TotalSpent
FROM
Orders
WHERE
OrderDate >= '2023-01-01' -- 在分组前,先筛选出2023年后的订单
GROUP BY
CustomerID;这里,
WHERE
而
HAVING
GROUP BY
HAVING
GROUP BY
HAVING
继续上面的例子,如果我们还想找出那些总消费超过1000元的客户:
SELECT
CustomerID,
SUM(OrderAmount) AS TotalSpent
FROM
Orders
WHERE
OrderDate >= '2023-01-01'
GROUP BY
CustomerID
HAVING
SUM(OrderAmount) > 1000; -- 在分组并计算总消费后,再筛选出总消费大于1000的客户这里,
HAVING SUM(OrderAmount) > 1000
SUM(OrderAmount)
我个人的经验是,如果你想基于原始行数据进行过滤,用
WHERE
HAVING
WHERE
SUM(OrderAmount) > 1000
WHERE
NULL
GROUP BY
GROUP BY
NULL
NULL
WHERE
IS NULL
NULL
NULL
举个例子,假设我们有一个
Employees
DepartmentID
NULL
SELECT
DepartmentID,
COUNT(EmployeeID) AS NumberOfEmployees
FROM
Employees
GROUP BY
DepartmentID;执行这条查询后,你会看到类似这样的结果: | DepartmentID | NumberOfEmployees | |--------------|-------------------| | 101 | 5 | | 102 | 8 | | NULL | 3 |
这里,所有
DepartmentID
NULL
NULL
COUNT(EmployeeID)
但是,
NULL
COUNT(column_name)
NULL
NULL
NULL
COUNT(*)
COUNT(1)
COUNT(DepartmentID)
DepartmentID
NULL
COUNT(*)
SUM()
AVG()
MIN()
MAX()
NULL
NULL
AVG(Salary)
NULL
NULL
NULL
所以,在处理
NULL
COUNT()
NULL
NULL
NULL
NULL
COALESCE()
ISNULL()
NULL
NULL
当我们需要更细粒度的分组时,
GROUP BY
GROUP BY
想象一下,你有一个
Sales
Region
ProductCategory
SalesAmount
SELECT
Region,
ProductCategory,
SUM(SalesAmount) AS TotalSales
FROM
Sales
GROUP BY
Region,
ProductCategory;这条查询的执行逻辑是这样的:
Region
ProductCategory
以上就是SQLGROUPBY怎么配合聚合函数使用_SQLGROUPBY与聚合函数组合用法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号