SQL2000でアクセスログからレコメンド機能(ビュー)を作る方法

このQ&Aのポイント
  • ある商品テーブルの閲覧履歴テーブルから、レコメンドエンジンを作りたいと思っています。
  • 具体的には、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       │ └────┴────────┘ 考え方だけでも構いませんのでご教示いただければ幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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.商品番号

t2hayashi
質問者

お礼

見た人数まで・・・・・すごいです。 自己結合ってのは発想として全く無かったです。 勉強になりました!ありがとうございます。

関連する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を教えてください

    こんなSQLを教えてください <更新前> テーブル1 |キー|コード| | 1|  a| | 2|  b| | 3|  c| テーブル2 |キー|コード| | 2|  B| | 4|  D| <更新後> テーブル1 |キー|コード| | 1|  a| | 2|  B| | 3|  c| こんなふうに テーブル1と同じデータがテーブル2にあったら テーブル1を書き換えるUPDATE文を教えてください

  • SQL

    SQLの初心者です。 次のようなテーブルがあるとします。 項目:A , B , C , D このテーブル合計を求めたいのです。 条件は、 同一テーブルでB=10の時のAの合計とD=10の時のCの合計の合計です。 B=10の時のAの合計は「sql sum(A) from テーブル where B=10」となります。 D=10の時のCの合計は「sql sum(C) from テーブル where D=10」となります。 この2つの合計を求めたいのです。 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • 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 説明が分かりづらくて申し訳ありませんが、よろしくお願い致します。

  • 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    :   :   :

  • 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