我使用this website来练习SQL。我有这个问题:
SELECT DISTINCT maker
FROM Product
GROUP BY maker
HAVING COUNT(type) = 1
AND COUNT(model) > 1
由于某种原因,两个计数聚合都返回相同的值 - 好像它们是COUNT(*) - 但这不是我所期望的。请解释原因,如果不是太麻烦,那么正确的方法是什么。
答案 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()聚合函数,计算您查询的表的记录数。 (产品表) 您将哪一列作为输入没有区别。 它会返回与你说的相同的输出。 这完全正常。