Sql ACCESS按每组计数选择前10条记录

Sql ACCESS按每组计数选择前10条记录,sql,ms-access,count,grouping,Sql,Ms Access,Count,Grouping,我在Office 365的MS Access中遇到此查询问题。对于每个分组,我都尝试按ItemCount选择前10行。因此,每个GroupID将显示前10个ItemName计数。我知道下面的是错误的,因为它只会查询10条记录。我不知道从这里到哪里去。我尝试了一个子查询,该子查询对项目进行排序,然后尝试提取前10个项目,但我显然做错了 Select Top 10 GroupID, ItemName, COUNT(ItemName) as ItemCount FROM Table GROUP BY

我在Office 365的MS Access中遇到此查询问题。对于每个分组,我都尝试按ItemCount选择前10行。因此,每个GroupID将显示前10个ItemName计数。我知道下面的是错误的,因为它只会查询10条记录。我不知道从这里到哪里去。我尝试了一个子查询,该子查询对项目进行排序,然后尝试提取前10个项目,但我显然做错了

Select Top 10 GroupID, ItemName, COUNT(ItemName) as ItemCount
FROM Table
GROUP BY GROUPID, ItemName
Order By COUNT(ItemName) DESC;
有什么建议吗


谢谢

请尝试下面的方法,在子查询中使用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;

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

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多行。

它当前会抛出一个错误,但我会继续尝试。子查询't2.ItemName'中的备忘录、OLE或超链接无效。@user3643304以前从未听到过错误,只是进行了研究,我认为这是因为“ItemName”的类型“一栏。是长期的吗?这里提供了一个解决方案:是的,它是一个长文本列。我会调查备忘录字段的事情。谢谢。我以为这就是问题所在,但查询被卡住了,没有进度条,只是没完没了地“运行查询”。@user3643304。升级数据库并使用窗口功能。或者创建一个包含聚合结果的临时表。