2

我有 2 个通过 id 链接的表(ENTRIES 和 USERS),我只想从前 5 个用户中选择所有条目,然后按单个用户条目的 COUNT 对它们进行排序。

USERS    ENTRIES

tom      entry1
mary     entry2
jane     entry3
tom      entry4
tom      entry5

等等....显示为

USERS    ENTRIES

tom      entry1
tom      entry4
tom      entry5
jane     entry3
mary     entry2

我的代码目前只是按名称排序,但没有按 COUNT 个条目列出

SELECT  ENTRIES.entry, USERS.NAME   FROM ENTRIES, USERS 
WHERE ENTRIES.USER_ID = USERS.ID 
ORDER BY USERS.NAME 
4

1 回答 1

3

由于您使用的是 Oracle,因此您可以使用窗口函数来获取每个用户的总数:

SELECT e.entry, 
  u.NAME,
  count(*) over(partition by u.name) Total
FROM ENTRIES e
INNER JOIN USERS u
  ON e.USER_ID = u.ID 
ORDER BY total desc, u.NAME

请参阅SQL Fiddle with Demo

如果你想只返回前 5 行,那么你可以使用:

select entry,
  name,
  total
from 
(
  SELECT e.entry, 
    u.NAME,
    count(*) over(partition by u.name) Total,
    rownum rn
  FROM ENTRIES e
  INNER JOIN USERS u
    ON e.USER_ID = u.ID
) 
where rn <= 5
ORDER BY total desc, NAME

请参阅带有演示的 SQL Fiddle

于 2013-03-12T19:11:13.603 回答