首页 > 解决方案 > 在 SQL 的 COUNT() 中使用 DISTINCT * 会发生什么?

问题描述

我刚刚了解了 COUNT() 函数,以及如何通过传递 * 作为参数来获取列中的行数。

SELECT COUNT(*) FROM table;

我还了解到,我们可以使用 DISTINCT 获取表中列的不同行数。

SELECT COUNT(DISTINCT column) FROM table;

我注意到以下内容没有返回任何内容。

SELECT COUNT(DISTINCT *) FROM table;

为什么是这样?

我想我的问题的根源是我不太完全理解带有 * 作为参数的 COUNT() 函数的确切作用。我的资源说 COUNT() 函数将列作为参数并计算有多少非空行。假设我们有一个表,该表有一列,其中一些行同时具有 NULL 和非 NULL 值。如果 COUNT(column) 不计算非 NULL 行,那么在 COUNT(*) 中会发生什么不同以便计算所有行?进而,在 COUNT(DISTINCT *) 期间会发生什么?

标签: sql

解决方案


在大多数数据库中,这将是一个语法错误。如果允许,它可能相当于:

select count(*)
from (select distinct * from t) t

但是,NULL价值观可能会抛弃它。


推荐阅读