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

然后,我想检索每个不是“爆米花”的电话号码请求的每个 DISTINCT item_type 的列表,然后按该 item_type 分组。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 Fiddle 演示

于 2012-11-13T07:45:28.513 回答