GROUP BY - 不对 NULL 进行分组

作者:编程家 分类: sqlserver 时间:2025-11-02

GROUP BY - 不对 NULL 进行分组

在SQL语言中,GROUP BY是一种常用的操作,用于按照一个或多个列的值对结果进行分组。通常情况下,GROUP BY会将相同值的行分为一组,并对每组进行聚合计算。然而,在实际应用中,我们可能会遇到一些特殊情况,即某些列存在NULL值,而我们又不希望将NULL值作为一组进行分组。这时候,我们可以使用在GROUP BY中使用NULLS FIRST或NULLS LAST来控制对NULL值的处理。

NULLS FIRST和NULLS LAST的区别

在进行GROUP BY操作时,默认情况下,NULL值会被作为一组进行分组。但是,在某些情况下,我们可能希望将NULL值放在分组的最前面或最后面。这时候,我们可以使用NULLS FIRST或NULLS LAST来实现。

NULLS FIRST表示将NULL值放在分组的最前面,而NULLS LAST表示将NULL值放在分组的最后面。通过在GROUP BY子句中使用这两个关键字,我们可以控制对NULL值的排序和分组。

案例代码

假设我们有一个员工表,其中包含员工的姓名和所在部门。现在我们想要按照部门对员工进行分组,但是不希望将NULL值作为一组进行分组。

首先,我们创建一个名为"employees"的表,并插入一些示例数据:

sql

CREATE TABLE employees (

id INT,

name VARCHAR(50),

department VARCHAR(50)

);

INSERT INTO employees (id, name, department)

VALUES (1, 'John', 'Sales'),

(2, 'Jane', 'Marketing'),

(3, 'Mike', NULL),

(4, 'Sarah', 'Sales'),

(5, 'David', NULL);

接下来,我们可以使用NULLS LAST关键字将NULL值放在分组的最后面:

sql

SELECT department, COUNT(*) as count

FROM employees

GROUP BY department

ORDER BY department NULLS LAST;

运行以上代码,我们将得到如下结果:

department | count

------------|-------

Marketing | 1

Sales | 2

NULL | 2

可以看到,部门为NULL的员工被放在了分组的最后面。

如果我们想要将NULL值放在分组的最前面,可以使用NULLS FIRST关键字:

sql

SELECT department, COUNT(*) as count

FROM employees

GROUP BY department

ORDER BY department NULLS FIRST;

运行以上代码,我们将得到如下结果:

department | count

------------|-------

NULL | 2

Marketing | 1

Sales | 2

可以看到,部门为NULL的员工被放在了分组的最前面。

通过在GROUP BY子句中使用NULLS FIRST或NULLS LAST关键字,我们可以控制对NULL值的处理。这在实际应用中非常有用,特别是当我们希望将NULL值放在分组的最前面或最后面时。通过合理使用这两个关键字,我们可以更灵活地进行数据分析和聚合计算。