34
+----------+----------+
| user_id  | video_id |
+----------+----------+
|        1 |    1     |
|        1 |    1     |
|        1 |    2     |
|        2 |    1     |
|        2 |    2     |
+----------+----------+

上記のようなテーブル設定があります。クエリから合計数を返したいと思います。

それぞれuser_idDISTINCT video_id. 上記のように、user_id = 12 つの一意の video_id があり、user_id = 22 つの一意の video_id があります。これにより、合計 4 になります。目的の結果を得るためにクエリを整理する最善の方法がわかりません。

基本的に各 user_id には、次のようなものが必要です。COUNT(DISTINCT video_id)

すべての合計数を返すだけの最終結果が欲しいです。

4

4 に答える 4

78

各ユーザーの合計数を取得する場合は、次を使用します。

select user_id, count(distinct video_id)
from data
group by user_id;

次に、合計の video_ids を取得する場合は、これをサブクエリ内にラップします。

select sum(cnt) TotalVideos
from
(
  select user_id, count(distinct video_id) cnt
  from data
  group by user_id
) d

両方のデモで SQL Fiddle を参照してください。

最初のクエリは2for eachの結果をuser_id返し、次にすべての個別の video_id の合計を取得するために、カウントを合計します。

于 2013-03-29T20:31:47.630 に答える
3

合計数は…

select distinct count(video_id) from Table
where...
group...
于 2014-02-18T00:02:57.290 に答える
3
select user_id, count(distinct video_id) from TABLE group by user_id;
于 2013-03-29T20:29:40.057 に答える