如何根据同一个表上另一个查询的结果集执行查询?

时间:2012-11-13 07:33:36

标签: mysql

可以为多个项目提出请求,唯一的关键是代理请求_id

我有以下查询,它返回9位数电话号码的结果集

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

然后,我想检索每个DISTINCT item_type请求的每个phone_number GROUP BY的列表,其中item_type不是'爆米花'然后是item COUNT(*) pretzels 200 chips 150 crackers 125 … … phone_number item_type 1}}。 IE我想了解客户倾向于购买的类似产品。

所需的结果集可能看起来像这样

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)
);

在这种情况下,购买爆米花和椒盐卷饼的item COUNT(*) cc 1 notpopcorn 1 的数量是200(我对此值感兴趣)。购买爆米花的人购买椒盐脆饼的总数是1,000,但这不是我感兴趣的价值。

如何创建仅指定{{1}}的单个查询并检索上述结果,该结果显示客户也购买的商品?

另外 - 如果有人可以帮我制作一个更有描述性的标题,那将是值得赞赏的。

修改

这是表格

{{1}}

修改

根据此数据http://www.sqlfiddle.com/#!2/23236/2

请求所需的输出
{{1}}

1 个答案:

答案 0 :(得分:2)

<击>

<击>
  

然后我想检索每个DISTINCT item_type的列表   每个那些不是'爆米花'的phone_number请求   然后GROUP BY那个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 Fiddle Demo

<击>

更新:试试这个:

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';

Updated SQL Fiddle Demo