sql - 在 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 *) 期间会发生什么?
解决方案
在大多数数据库中,这将是一个语法错误。如果允许,它可能相当于:
select count(*)
from (select distinct * from t) t
但是,NULL
价值观可能会抛弃它。
推荐阅读
- r - 将Long Form数据转换为R中的三维数组
- python - 在python中返回一个字符串并且只得到一个空数组
- mysql - 使用 SQL 识别和标记记录时间
- python - Solver (baron) 返回非零返回码 (1)
- .net - 搜索 Microsoft.Extensions.Caching.Memory.MemoryCache 的源代码
- html - 如何根据容器而不是屏幕大小来提供图像大小
- scala - 哪种方式是使用 Scala 在 Play Framework 中进行路由的更好做法?
- ios - Swift 使用小型大写字母
- angular - 如何使用 @ngrx/data 自定义减速器?
- angular - 对预检请求的响应未通过访问,并且不存在“Access-Control-Allow-Origin”标头。使用 [HttpPost] 时