我意识到这可能是一个简单的问题,但我的SQL基本上是最基本的。
假设我有一个包含订单列表的表,其中item_id
是其中一列。我需要显示3个最少(或3个)最受欢迎的商品订单。
我知道我需要使用item_id
对订单进行分组,然后对其进行计数。然后我需要以降序(或升序)顺序显示底部(或顶部)3。我只是不完全确定如何构建这样的查询。
答案 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