3

リクエストは複数のアイテムに対して行うことができ、唯一のキーはサロゲート request_id です

9桁の電話番号の結果セットを返す次のクエリがあります

SELECT phone_number FROM purchases
WHERE item_type = 'popcorn'
GROUP BY phone_number;

次に、「ポップコーン」ではなく、次にそれであるDISTINCT item_type各リクエストのリストを取得したいと思います。IE 顧客が購入する傾向にある類似商品を知りたい。phone_numberGROUP BYitem_type

目的の結果セットは次のようになります

item        COUNT(*)
pretzels    200
chips       150
crackers    125
…           …

この場合、phone_numberポップコーンとプレッツェルを購入した人の数は 200 人でした (この値に興味があります)。ポップコーンを購入した人によるプレッツェルの合計購入数は 1,000 でしたが、これは私が興味を持っている値ではありません。

item_typeのみを指定して、顧客が購入したアイテムを示す上記のような結果を取得する単一のクエリを作成するにはどうすればよいですか?

また、誰かが私を助けてくれるなら、もっとわかりやすいタイトルを付けていただければ幸いです。

編集

ここにテーブルがあります

CREATE TABLE purchases(
    request_id BIGINT NOT NULL auto_increment,
    phone_number INT(9) NOT NULL,
    item_type VARCHAR(256) NOT NULL,
    PRIMARY KEY(request_id)
);

編集

このデータhttp://www.sqlfiddle.com/#!2/23236/2に基づく望ましい出力のリクエスト

item        COUNT(*)
cc          1
notpopcorn  1
4

1 に答える 1

2

次に、「popcorn」ではないphone_numberのそれぞれによって要求されたすべてのDISTINCT item_typeのリストを取得してから、そのitem_typeでGROUPBYを実行します。IE顧客が購入する傾向のある類似製品を知りたい。

これを試して:

SELECT item_type as item, COUNT(*)
FROM purchases 
WHERE phone_number NOT IN (SELECT DISTINCT phone_number 
                           FROM purchases
                           WHERE item_type = 'popcorn')
GROUP BY item_type;

SQLフィドルデモ

更新:これを試してください:

SELECT item_type as item, COUNT(*)
FROM purchases 
GROUP BY item_type, phone_number
HAVING phone_number IN (SELECT DISTINCT phone_number 
                           FROM purchases
                           WHERE item_type = 'popcorn')
  AND item_type <> 'popcorn';

更新されたSQLフィドルデモ

于 2012-11-13T07:45:28.513 に答える