4

私はこのクエリに頭を悩ませようとしています-かなり簡単に思えます

次の表は、どのユーザーがどの動画を視聴したかを示しています

topic_user_id | topic_id | ユーザーID
     1 | 10 | 3
     2 | 10 | 4
     3 | 11 | 5
     4 | 11 | 3
     5 | 12 | 6
     6 | 13 | 6
     7 | 14 | 7
     8 | 11 | 8
     9 | 11 | 9
     10 | 14 | 10
     11 | 15 | 11
     12 | 16 | 11
     13 | 17 | 11

ここで、特定のビデオを視聴したユーザーの数を調べるために、次のクエリがあります。

特定の動画を視聴したユーザーの数

count(distinct(user_id))as'Number of Users'、topic_idfromtopic_userを選択します
user_idがnullではない場合
topic_idでグループ化

出力

ユーザー数| topic_id
    2 | 10     
    4 | 11     
    1 | 12     
    1 | 13     
    2 | 14     
    1 | 15     
    1 | 16     
    1 | 17     

読み方:2人のユーザーがトピック10を視聴し、4人がトピック11を視聴しました。

これは問題なく動作します-しかし、私が探しているのは見つけることです:

1本の動画
を視聴したユーザー数2本の動画を視聴し
たユーザー数3本の動画を視聴したユーザー数

出力は次のようになります

ユーザー数| 視聴した動画の数
      6 | 1
      2 | 2
      1 | 3

読み方-6人が1本のビデオのみを視聴し、2人が2本のビデオを視聴したというように続きます。

これについては助けが必要です。

前もって感謝します

4

5 に答える 5

2

より簡単な方法があるかもしれませんが、サブクエリは機能します

select
    videos as 'Number of videos',
    count(user_id) as 'Num of Users'
from (
   select
        count(distinct(topic_id)) as videos,
        user_id from topic_user
   group by
        user_id
 ) sub
 group by
    videos
于 2012-06-28T13:48:45.327 に答える
1
select u.n as `Number of Video watched`, count(t.user_id)
from
    (select user_id, count(*) as `cnt`
    from topic_user 
    group by user_id) t INNER JOIN(
        SELECT 1 as `n` FROM DUAL 
        UNION 
        SELECT 2 as `n` FROM DUAL 
        UNION
        SELECT 3 as `n` FROM DUAL) u ON u.n = t.cnt
group by u.n

フィドル:http ://sqlfiddle.com/#!2/844ee/15

于 2012-06-28T14:12:00.777 に答える
0

これを試して::

Select first_table.count(distinct(user_id))  as 'Number of Users', SUM(Count(topic_id))
from
(select count(distinct(user_id)) as 'Number of Users',topic_id from topic_user
where user_id is not null
group by topic_id) as first_table group by Count(topic_id)
于 2012-06-28T13:48:26.587 に答える
0

これを試して

SELECT videos AS `Number of videos`,COUNT(user_id) AS `Num of Users`
FROM (SELECT COUNT(DISTINCT(topic_id)) AS videos,user_id FROM topic_user
GROUP BY user_id) sub_query
GROUP BY
videos
于 2012-06-28T14:05:49.750 に答える
0

「n本の動画を視聴したユーザーの数」は、次の2つの方法で解釈できます。

1)タイトルに関係なく、何人のユーザーがn本の動画を視聴しましたか?同じ動画タイトルが2回視聴された可能性があります。

select videoCount, count(*) as userCount
  from (
    select count(*) as videoCount
      from topic_user
    group by user_id
  ) t
 group by videoCount

2)n個の異なるビデオタイトルを視聴したユーザーの数。

select videoCount, count(*) as userCount
  from (
    select count(distinct topic_id) as videoCount
      from topic_user
    group by user_id
  ) t
 group by videoCount
于 2012-06-28T14:14:23.630 に答える