私はビデオ再生サイトのデータベースを作成しています。ユーザーと表が表示された表があります。私はいくつかの見ているビデオのペアをSQLクエリを使用して見つける必要があります。例:ユーザー1がビデオ12,43,50,66,78を視聴した。ユーザー2は12,43,45,50を視聴しました。ユーザー3は12,35,50,66,78を監視しました。ユーザー4が視聴した回数33,66,69,78 2人の視聴カップルは(12,50)と(66,78)です。 しかし、私はこのカップルを将来の世代のために形成する方法さえも得られません。 私の質問は、すべての可能なカップルを形成し、それぞれのビューの数を数える方法です。最も頻繁に使用されるペアを作成してカウントするoracle
0
A
答えて
0
自己join
はこれを行うには正しい方法です。私は最も簡単なクエリの形式は、
select vh.*
from (select vh1.movie as movie1, vh2.movie as movie2, count(*) as cnt,
rank() over (order by count(*) desc) as seqnum
from viewing_history vh1 inner join
viewing_history vh2
on vh1.userid = vh2.userid and vh1.movie < vh2.movie
group by vh1.movie, vh2.movie
) vh
where seqnum = 1;
0
下のソリューションでは、入力データをシミュレートするためのサブクエリを作成します。アプリケーションでは、viewing_history
の代わりに、視聴履歴テーブルを使用する必要があります。この問題で "users"テーブルがどのように関係しているかわかりません。 movie_pairs
という名前の2番目のサブクエリは、ビュー履歴の内部結合であり、ペアを作成する方法です。私はそれを超えました - それと同時に、私は最も頻繁に一緒に見られるペアを特定するために続けました。
with
viewing_history (userid, movie) as (
select 1, 12 from dual union all
select 1, 43 from dual union all
select 1, 50 from dual union all
select 1, 66 from dual union all
select 1, 78 from dual union all
select 2, 12 from dual union all
select 2, 43 from dual union all
select 2, 45 from dual union all
select 2, 50 from dual union all
select 3, 12 from dual union all
select 3, 35 from dual union all
select 3, 50 from dual union all
select 3, 66 from dual union all
select 3, 78 from dual union all
select 4, 33 from dual union all
select 4, 66 from dual union all
select 4, 69 from dual union all
select 4, 78 from dual
),
-- end test data, query begins here (but include the keyword WITH from above)
movie_pairs (movie1, movie2, ct) as (
select a.movie, b.movie, count(*)
from viewing_history a inner join viewing_history b
on a.userid = b.userid and a.movie < b.movie
group by a.movie, b.movie
)
select movie1, movie2
from movie_pairs
where ct = (select max(ct) from movie_pairs)
order by movie1, movie2 -- ORDER BY is optional
;
出力:
MOVIE1 MOVIE2
---------- ----------
12 50
66 78
関連する問題
- 1. SPARQL最も頻繁に使用される述語
- 2. LINQを使用して最も頻繁に値を選択
- 3. C#linq、コレクションで最も頻繁に使用されるアイテムを取得する
- 4. 最も頻繁に発生する
- 5. 最も頻繁要素、MATLAB
- 6. 最も頻繁に発注されるパターン
- 7. LINQを使用して最も頻繁な単語を見つける
- 8. MySQLグループで最も頻繁に選択
- 9. 最も頻繁に表示される値を選択する方法は?
- 10. ハッシュマップを使用して最も頻繁に使用する単語を見つけるC++
- 11. Oracle Fusion Middlewareデータソースが頻繁に中断される
- 12. 最も頻繁に注文される製品はどれですか?
- 13. Vimのより頻繁に使用された構成の
- 14. 最も頻繁に使用される明確な用語セットを見つける
- 15. 最も頻繁なMySQL SELECTクエリを最適化する方法
- 16. リストを比較し、最も頻繁にペアを効率的に取得する方法は?
- 17. 大規模なトランザクションログファイルでSQLサーバーを操作する際に使用される最も低速で頻繁に使用されるクエリはありますか?
- 18. PIGで最も頻繁に発生する値を取得
- 19. パンダ:リストの列で最も頻繁に使用される値を見つける
- 20. Linq to xml最も頻繁に選択する値
- 21. SQLで最も頻繁に発生する順
- 22. 複数の列から最も頻繁に選択する
- 23. 最も頻繁に値が1つの列を選択してください。
- 24. 頻繁に使用されるWebサイトのキャッシング戦略
- 25. Jenkinsで最も頻繁に実行されるジョブを特定する方法を教えてください。
- 26. グループで最も頻繁に発生をキャプチャする変数を作成します
- 27. 配列内で最も頻繁に使用される要素を見つけよう
- 28. Oracleサーバーのドロップ・セッション頻繁に
- 29. 頻繁に更新されるgridview
- 30. 最も頻繁な要素をキャッシュするデータ構造
'group by user、movie' – jarlh
@jarlh - care to elaborate?私は、ユーザーが映画をどのようにグループ化しているのか分からない。 – mathguy