【问题标题】:SQL ORDER BY GROUP BYSQL ORDER BY GROUP BY
【发布时间】:2013-03-12 18:54:01
【问题描述】:

我有 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 

【问题讨论】:

  • 你用的是什么关系型数据库?

标签: sql group-by oracle11g sql-order-by


【解决方案1】:

由于您使用的是 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 with Demo

【讨论】:

  • 非常好,谢谢。这很好地解决了订购问题。刚刚也看到了前5名。再次感谢!
猜你喜欢
  • 1970-01-01
  • 2014-08-31
  • 1970-01-01
  • 2019-01-21
  • 2011-06-28
  • 2019-01-27
  • 2017-02-06
  • 2013-01-24
相关资源
最近更新 更多