SQL2000でアクセスログからレコメンド機能(ビュー)を作る方法
- ある商品テーブルの閲覧履歴テーブルから、レコメンドエンジンを作りたいと思っています。
- 具体的には、AテーブルからBのビューを導きたいのですが、どのようなSQL文を書けば良いのでしょうか?
- また、Aテーブルには商品番号と見た人の情報が含まれており、Bビューには商品番号と他に見た商品番号の情報が含まれています。
- ベストアンサー
【SQL2000】アクセスログからレコメンド機能(ビュー)を作りたい
SQL文の組み立て方がさっぱりわからないので質問です。 ある商品テーブルの閲覧履歴テーブルから、レコメンドエンジンを 作りたいと思っています。 (amazonなどである「この商品を見た人はこんな商品も見ています」ってヤツです) 以下AテーブルからBのビューを導きたいのですが どのようなSQL文を書けばいいのでしょうか? ■Aテーブル ┌────┬────────┐ │商品番号│見た人 │ ├────┼────────┤ │1 │A │ ├────┼────────┤ │1 │B │ ├────┼────────┤ │2 │A │ ├────┼────────┤ │2 │B │ ├────┼────────┤ │4 │C │ ├────┼────────┤ │5 │D │ ├────┼────────┤ │9 │B │ ├────┼────────┤ │10 │B │ ├────┼────────┤ │11 │D │ ├────┼────────┤ │11 │B │ ├────┼────────┤ │12 │A │ ├────┼────────┤ │12 │B │ ├────┼────────┤ │12 │C │ └────┴────────┘ ■Bビュー ┌────┬────────┐ │商品番号│他に見た商品番号│ ├────┼────────┤ │1 │2 │ ├────┼────────┤ │1 │12 │ ├────┼────────┤ │2 │1 │ ├────┼────────┤ │2 │12 │ ├────┼────────┤ │11 │5 │ ├────┼────────┤ │11 │1 │ ├────┼────────┤ │11 │2 │ ├────┼────────┤ │11 │10 │ ├────┼────────┤ │11 │12 │ ├────┼────────┤ │12 │1 │ ├────┼────────┤ │12 │2 │ ├────┼────────┤ │12 │4 │ ├────┼────────┤ │12 │9 │ ├────┼────────┤ │12 │10 │ ├────┼────────┤ │12 │11 │ └────┴────────┘ 考え方だけでも構いませんのでご教示いただければ幸いです。
- t2hayashi
- お礼率71% (97/135)
- SQL Server
- 回答数1
- ありがとう数2
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
自己結合してみましょう。 select x.商品番号,y.商品番号,count(*) as 見た人数 from tblA as x,tblA as y where x.商品番号<>y.商品番号 and x.見た人=y.見た人 group by x.商品番号,y.商品番号 order by x.商品番号,y.商品番号
関連するQ&A
- SQL
以下のような売上テーブルから、 「2009年のデータ」と「2008年と比較した2009年の売上数の増減」を 取得したいです。(商品の昇順で) 取得できるSQL文を教えていただきたいです。 どうぞよろしくお願いいたします。 <売上テーブル> 年, 商品, 売上数 --------------- 2008, A, 30 2008, B, 20 2008, C, 20 2009, A, 10 2009, C, 40 2009, D, 50 <結果>↓ 商品, 2009年の売上数, 増減 ------------------------- A, 10, -20 B, , -20 C, 40, 20 D, 50, 50
- ベストアンサー
- その他(プログラミング・開発)
- ACCESSのクエリで同じSQL文だが結果が異なる
ACCESS2003にて 選択クエリAをSQLビューで開きSQL文をコピー、 新規作成したクエリBのSQLビューに貼り付けて実行したところ、 AとBで結果の件数が異なりました。 そのままBを保存して終了。 BをSQLビューで開き、 SQL文の末尾の;を削除して実行すると、 Aと同じ件数の結果になりました。 再度Bを保存して終了し、 BをSQLビューで開き、 SQL文の末尾の;を削除して実行すると、 Aと異なる件数(元の結果)になりました。 何が原因なのでしょうか。 SQL文の内容は、サブクエリを含んでいて、サブクエリのFROMは SQLSERVERのリンクテーブルです。 よろしくお願いします。
- ベストアンサー
- その他(データベース)
- SQLを教えてください!!
テーブルAとテーブルBがあり、両方に存在しないものを抽出してエラーとする処理を行いたいのですが、 どういうSQlを書いたらいいのか教えてください。 下記例としてテーブルにデータがあったとしたら、結果として 004 商品D 005 商品E 006 商品G というデータを抽出したいのですが・・ テーブルA テーブルB ------------- ----------------------- コード 商品名 NO コード 商品名 001 商品A 1 001 商品A 002 商品B 2 001 商品A 003 商品C 3 002 商品B 004 商品D 4 003 商品C 006 商品G 5 003 商品C 6 005 商品E
- 締切済み
- その他(プログラミング・開発)
- SQLの書き方について教えてください。
SQL Server2000で下記のようなSQL文を書きたいと思っています。 テーブルAとテーブルAに無関係な2個のフィールドを 持つテーブルBがあり、テーブルAのデータをテーブルBにコピー したいと考えています。その際にテーブルBの2個のフィールドに対して 決められた値を挿入したいのですがどのように記述すればよいのか わかりません。 お分かりの方お教えいただけませんでしょうか よろしくお願いいたします。 下記の記述をしています。 INSERT INTO テーブルB ( A, B, C, D ) SELECT テーブルA.A, テーブルA.A, XXX1, XXX2 FROM reserveSETdateTRN; Cに東京 Dに品川 を入れたいと思っています
- 締切済み
- SQL Server
- こんなSQLを教えてください
こんなSQLを教えてください <更新前> テーブル1 |キー|コード| | 1| a| | 2| b| | 3| c| テーブル2 |キー|コード| | 2| B| | 4| D| <更新後> テーブル1 |キー|コード| | 1| a| | 2| B| | 3| c| こんなふうに テーブル1と同じデータがテーブル2にあったら テーブル1を書き換えるUPDATE文を教えてください
- ベストアンサー
- Oracle
- SQLでの抽出条件
SQL初心者です。初歩的な質問だと思いますが、ご教授願います。 以下のような2つのテーブルがあります。 【テーブルA】 グループ 社員番号 A 1 A 2 A 3 B 4 B 5 B 6 C 7 C 8 D 9 D 1 【テーブルB】 社員番号 1 9 テーブルBの社員番号と一致する場合、テーブルAをグループ単位で抽出しないようにしたいです。 ・グループAは社員番号1が一致するため抽出しない。 ・グループDは社員番号1と9が一致するため抽出しない。 【取得結果】 グループ 社員番号 B 4 B 5 B 6 C 7 C 8 説明が分かりづらくて申し訳ありませんが、よろしくお願い致します。
- ベストアンサー
- SQL Server
- ACCESS SQLステートメントについて初心者です。
お知恵を貸してください。 ACCESSでSQLステートメントで 『Aテーブル』 ID 商品コード1 商品コード2 1 1111 2222 2 2222 3333 3 4444 5555 『Bテーブル(商品コードマスター)』 商品コード 商品名 1111 ああああ 2222 いいいい 3333 うううう 4444 ええええ 5555 おおおお AテーブルとBテーブルを結合して ID 商品コード1 商品名 商品コード2 商品名 1 1111 ああああ 2222 いいいい 2 2222 いいいい 3333 うううう 3 4444 ええええ 5555 おおおお というCテーブルを作りたいです。 商品コード1と商品コード2の両方共 Bテーブルの商品コードから商品名を取得したいのですが、できないのですが・・・・ 出来ればBテーブル(商品コード)を2つ作くったり等したくないのですが、SQLステートメントでどう記述すれば良いですか?
- ベストアンサー
- その他(データベース)
- ACCESS 以下のように変更するSQL式を教えて
Microsoft Accessで以下のように変更するSQL式を教えてください。 (Windows10 , Access2016) 以下のようにテーブル(TABLE1)には、 A,B,Cの3つのフィールドがあり Aには番号が入っています。重複した番号もあります。 Bには0~9までのいずれか1つの数字が入っています。 Cにはa,b,cのいずれか1つの文字が入っています。 Aの各値に対してBの値が0のレコードは1個だけです。 (例)TABLE1 A B C 1 0 a 1 9 b 1 2 c 2 1 b 2 3 a 2 0 c 2 7 c 3 1 a 3 0 b : : : 999 0 a : : : このようなテーブル(TABLE1)に対して、 Aの各値毎に、 Bの値が0以外のレコードのCの値を Bの値が0のレコードのCの値に変更する SQL式 (ACCESSのクエリデザインのSQLレビューのSELECT;の所に入力する UPDATE TABLE1 SET C=…;のような式) を教えてください。 (例) 変更後のTABLE1 A B C 1 0 a 1 9 a 1 2 a 2 1 c 2 3 c 2 0 c 2 7 c 3 1 b 3 0 b : : : 999 0 a : : :
- ベストアンサー
- Access(アクセス)
- SQLにて順列の抽出
MySQLにてSELECT文にて順列の抽出をしようと試みていますが、順列を出すためのSQL文がわからず困っています。 TABLE1 +-----+-----+-----+-----+ | NUM | A | B | C | +-----+-----+-----+-----+ | 101 | 0 | 4 | 9 | +-----+-----+-----+-----+ | 102 | 2 | 2 | 0 | +-----+-----+-----+-----+ 例えば上記の様なテーブルがあって、NUM=101のA,B,Cを取り出して 049 094 409 490 904 940 のような順列を作り出してPHPから渡した変数D(仮にvar=409)と照らし合わせようと試みていますが、1つの行の中の数字で順列を抽出するSQL文がわからず困っていますので、ご教授願います。
- ベストアンサー
- MySQL
お礼
見た人数まで・・・・・すごいです。 自己結合ってのは発想として全く無かったです。 勉強になりました!ありがとうございます。