COUNT(列)返回COUNT(*)

时间:2014-01-18 02:18:21

标签: sql count

我使用this website来练习SQL。我有这个问题:

SELECT DISTINCT maker
FROM Product
GROUP BY maker
HAVING COUNT(type) = 1
AND COUNT(model) > 1

由于某种原因,两个计数聚合都返回相同的值 - 好像它们是COUNT(*) - 但这不是我所期望的。请解释原因,如果不是太麻烦,那么正确的方法是什么。

2 个答案:

答案 0 :(得分:1)

您的having条款是:

HAVING COUNT(type) = 1 AND COUNT(model) > 1

每个组件都计算该列中具有值的非NULL行数。因此,如果type包含200个NULL和100个'1' s,则值为100. Count(*),在这种情况下,将返回行数,或300。

也许您想要计算每列中不同值的数量。在这种情况下,您可以使用:

HAVING COUNT(DISTINCT type) = 1 AND COUNT(DISTINCT model) > 1

但实际上,COUNT(DISTINCT)通常比其他聚合函数使用更多资源。以下内容做同样的事情并且通常表现更好:

HAVING min(type) = max(type) and min(model) < max(model)

答案 1 :(得分:0)

Count()聚合函数,计算您查询的表的记录数。 (产品表) 您将哪一列作为输入没有区别。 它会返回与你说的相同的输出。 这完全正常。