【发布时间】:2013-02-09 00:57:58
【问题描述】:
我需要统计一列的不同值,比如:
Hours
1
1
2
null
null
null
结果必须是:3。我的查询是:
select count(distinct hour) from hours;
但它返回:2。我也测试过:
select count(*) from hours group by hour
但它返回三行:
(1) 3
(2) 2
(3) 1
如何将 null 值计为 1 个值并使用 distinct 来避免计数重复值?
我正在学习高级 SQL,他们希望我满足所有解决方案的这些要求:
尽量减少解决查询所需的子查询数量。 此外,您不得使用以下结构:
- 在 FROM 或 SELECT 中选择。您可以有子查询(在 WHERE 或 HAVING 中选择)
- COUNT (COUNT...))、SUM (COUNT...)) 等聚合函数的组合。
- 如果可以避免,请使用 UNION。
- 非标准函数(如 NVL)
- 案例
【问题讨论】:
-
使用 coalesce(col,0)
-
@Strawberry:这会将
0和null视为相同的值 -
所以使用 coalesce(col,-1)