1

以下のようなオラクルテーブルがあります:

User - UserId,
Item - ItemId,
UserVote - UserVoteId, UserId, ItemId. 

ユーザーは複数回投票できるようになりました。このクエリで苦労しています: Get item(s) most voted uniquely - つまり、同じ人からの複数の投票は 1 つとしてカウントされます。

SQL Serverだったら一時テーブルとか全部作ったかもしれませんが、Oracleでの扱いがわかりません。また、2 つの項目が両方とも 18 の「一意の」票を持っている場合、同点を処理する方法を考えるのにも苦労しています。その場合、私は両方のアイテムが欲しいです。

4

5 に答える 5

3
SELECT  *
FROM    (
        SELECT  q.*,
                DENSE_RANK() OVER (ORDER BY votes DESC) AS dr
        FROM    (
                SELECT  itemId, COUNT(DISTINCT userId) AS votes
                FROM    userVote
                GROUP BY
                        itemId
                ) q
        )
WHERE   dr = 1
于 2012-04-24T08:59:55.380 に答える
1
select ItemID,
       VoteCount
from
  (
    select ItemID,
           count(distinct UserId) as VoteCount,
           rank() over(order by count(distinct UserId) desc) as rn
    from UserVote
    group by ItemID
  ) U
where rn = 1;
于 2012-04-24T09:09:18.263 に答える
1

多分このようなもの:

WITH CTE
AS
(
    SELECT
        COUNT(DISTINCT UserId) AS votes,
        item.ItemId
    FROM
        UserVote
    GROUP BY
        item.ItemId
)
SELECT
    *
FROM
    item
    LEFT JOIN CTE
        CTE.ItemId=item.ItemId
ORDER BY
    votes DESC;

これによりCOUNT、投票したユーザーが区別されます。したがって、アイテム ID ごとに一意のユーザーが存在します。どのような出力が必要なのかわからないので、投票数の多いアイテムが最初になるように注文しました。トップ 10 か何かだけが必要な場合は、非常に簡単に選択に追加できます。

于 2012-04-24T08:58:06.947 に答える
0

どうですか

SELECT "ItemId", COUNT(*) AS "VoteCount"
  FROM (SELECT DISTINCT "ItemId", "UserID"
          FROM "UserVote") a
  GROUP BY "ItemId"
  ORDER BY COUNT(*) DESC

共有してお楽しみください。

于 2012-04-24T11:36:45.083 に答える
0

次の ANSI クエリは、同じユーザーによる複数の投票を考慮せずに、最も投票されたアイテムを返します (アプリケーションに返される行を制限する必要があります)。

SELECT ItemId, COUNT(DISTINCT UserId) AS "votes"
FROM UserVote
GROUP BY ItemId
ORDER BY "votes" DESC;

クエリの行数を本当に制限する必要がある場合は、Oracle SQL 方言を使用してそれを行うことができます。

SELECT ItemId, votes
FROM (
  SELECT ItemId, COUNT(DISTINCT UserId) AS "votes"
  FROM UserVote
  GROUP BY ItemId
  ORDER BY "votes" DESC
)
WHERE ROWNUM <= :n; -- :n is a placeholder for the number of rows to return
于 2012-04-24T13:40:01.347 に答える