在SQL中统计类别内不同项数

8

我需要编写以下SQL语句:

我有一张表,其中包含许多项目,每个项目都有一个类别。总共有3个类别。

我需要选择DISTINCT的类别,然后按每个类别中的项目数量对它们进行排序。

这种方法行得通吗?或者太慢了吗?

SELECT DISTINCT category, count(*) AS counter
FROM item_descr
GROUP BY category
ORDER BY counter DESC

3
这种情况下使用DISTINCT是不必要的。 - Tim Lehner
3个回答

16

由于您正在使用 GROUP BY category,所以不需要使用 DISTINCT

SELECT category, count(*) AS counter
FROM item_descr
GROUP BY category
ORDER BY counter DESC

6

GROUP BY 可以满足你的需求,DISTINCT 是多余的。


0

如果您想在较大的表格中获得良好的性能,特别是在分类上,则拥有索引非常重要。


这个语句实际上可能并不正确,因为该类别的值太少,索引无法发挥作用。 - Gordon Linoff
你不知道那个。用户说的是“我有一个表,其中有许多项目,每个项目都有一个类别”。该表有许多项目,但只有3个类别选项。我们不知道表的大小是10个项目还是1000万个项目。你不能根据表中类别字段的基数猜测表的大小。如果您可以使用索引有效地消除大型数据库的三分之一,这将有所帮助。 - John McKnight
2
索引的问题在于类别数量,而不是项目数量。三个类别意味着索引将具有非常高的选择性。这可能对性能没有太大影响。 - Gordon Linoff
我同意它可能没有太大的影响,但在某些情况下,任何可以获得的提升都是积极的,特别是如果您需要考虑用户对速度的感知。 - John McKnight

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接