聚合函数完成结果而不是组

时间:2015-11-30 14:14:35

标签: sql

在子选择旁边是否有另一种方法可以根据整个查询的结果而不是每个组获得聚合函数的结果?

示例:

SELECT count(*) 
FROM table 
GROUP BY objId;

返回每个objId的条目数。

获取不同objId的数量的一种方法是嵌套查询:

SELECT count(*) 
FROM 
     (SELECT objId 
      FROM table 
      GROUP BY objId);

但是有没有另一种方法可以在没有子查询的情况下指定count函数的工作范围?

1 个答案:

答案 0 :(得分:1)

使用count(distinct)

可以更轻松地处理第二个查询
select count(distinct objid)
from table;

注意:如果objid可能是NULL,则存在细微差别。如果是这样,那么正确的替换是:

select (count(distinct objid) +
        max(case when objid is null then 1 else 0 end)
       )
from table;