如何计算行组并显示顶部/底部3

时间:2010-02-19 17:11:38

标签: sql sql-server sql-server-2008 count group-by

我意识到这可能是一个简单的问题,但我的SQL基本上是最基本的。

假设我有一个包含订单列表的表,其中item_id是其中一列。我需要显示3个最少(或3个)最受欢迎的商品订单。

我知道我需要使用item_id对订单进行分组,然后对其进行计数。然后我需要以降序(或升序)顺序显示底部(或顶部)3。我只是不完全确定如何构建这样的查询。

4 个答案:

答案 0 :(得分:11)

Sql Server

SELECT TOP 3 item_id, COUNT(*) as itemcount 
FROM table 
GROUP BY item_id ORDER BY itemcount

将DESC添加到命令下降

答案 1 :(得分:3)

select item_id, count(*)
from table
group by item_id;

会给你整个清单。

底部3:

select item_id
from (
    select item_id, count(*) as cnt
    from table
    group by item_id
    order by cnt
) where rownum < 4;

前三名:

select item_id
from (
    select item_id, count(*) as cnt
    from table
    group by item_id
    order by cnt desc
) where rownum < 4;

注意:此sytnax适用于Oracle。如果您有MySql,请使用LIMIT,如果您有sql-server,请使用TOP。

ORDER BY会对结果进行排序。升序是默认值,因此如果您想获得最大值,请使用“desc”。

GROUP BY(与count(*)一起使用时)将计算类似对象的组

其中rownum&lt; 4:这是oracles做的极限。它返回已运行的查询的前3行。 where子句在order子句之前运行,因此这就是为什么你必须将它作为嵌套查询。

答案 2 :(得分:3)

对于SQL服务器:

select    top 3 item_id, count(item_id) 
from      table 
group by  item_id 
order by  count(item_id) desc

将为您提供3个最受欢迎的item_id

使用:

order by  count(item_id) 

将为您提供3个最不受欢迎的item_id

答案 3 :(得分:2)

MySQL

SELECT  item_id, COUNT(*) AS cnt
FROM    orders
GROUP BY
        item_id
ORDER BY
        cnt DESC
LIMIT 3