访问按组每COUNT个选择前10条记录

时间:2019-11-15 20:25:03

标签: sql ms-access count grouping

我在Office 365的MS Access中遇到此查询时遇到麻烦。对于每个分组,我尝试按ItemCount选择前10行。因此,每个GroupID将显示前10个ItemName计数。我知道以下错误,因为它只会查询十条记录。我不确定从这里去哪里。我尝试了一个子查询来对商品进行排序,然后尝试提取前10个商品,但显然我做错了。

Select Top 10 GroupID, ItemName, COUNT(ItemName) as ItemCount
FROM Table
GROUP BY GROUPID, ItemName
Order By COUNT(ItemName) DESC;

任何建议表示赞赏

谢谢!

3 个答案:

答案 0 :(得分:0)

请在下面尝试,在子查询中使用TOP关键字。

Select GroupID, ItemName, COUNT(ItemName) as ItemCount
FROM Table t1
WHERE ItemName in (
                    Select TOP 10 t2.ItemName
                    from Table t2
                    where t2.GroupID = t1.GroupID
                    order by count(t2.ItemName) desc, t2.ItemName
                  )
GROUP BY GROUPID, ItemName
Order By GROUPID, COUNT(ItemName) DESC;

答案 1 :(得分:0)

您可以使用相关子查询。这是一种方法:

select GroupID, ItemName, count(*) as ItemCount
from Table as t
group by groupid, ItemName
having count(*) in (select top 10 count(*)
                    from table as t2
                    where t2.groupid = t.groupid
                    group by t2.groupid, t2.itemname
                    order by count(*) desc
                   )
order by count(*) desc;

注意:如果有联系,则给定组的行数可能超过10。

答案 2 :(得分:-1)

您是否可以尝试从中选择前10名并在第二个选择中包括订单依据来创建CTE(通用表表达式)。 它应该可以工作,如果不可以,请通知我。

with cte as (
Select GroupID, ItemName, COUNT(ItemName) as ItemCount
FROM Table
GROUP BY GROUPID, ItemName
)

Select top(10)* 
from cte 
Order By cte.ItemCount DESC