2

ID でリンクされた 2 つのテーブル (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 に答える