Mysql在同一个表中匹配和计数

时间:2014-03-03 16:53:43

标签: mysql sql

我在同一张桌子上有一些条件的计数产品遇到了麻烦..

表格结构:

INSERT INTO `filter` (`filter_seq_id`, `group_id`, `product_seq_id`) VALUES
(1, 1, 10),
(2, 1, 11),
(3, 1, 12),
(4, 1, 13),
(5, 2, 14),
(6, 2, 15),
(7, 2, 16),
(8, 2, 17),
(9, 3, 18),
(10, 3, 19),
(11, 3, 20),
(12, 3, 21),
(13, 4, 20),
(14, 4, 11),
(15, 4, 27),
(16, 4, 29),
(17, 5, 11),
(18, 5, 20),
(19, 5, 27),
(20, 5, 13);

这里我只想在group_id(1,2,3)中计算不同的product_seq_id,只要product_seq_id也同时退出(4,5)组ID ..

例如:

  • group_id - > 1找到product_seq_id 11,5,5这样不同的计数是1
  • group_id - > 2找不到任何东西
  • group_id - > 3找到product_seq_id 20 in 4,5所以不同的计数是1

我已经尝试过以下查询它没有返回我期待 如果product_seq_id存在于(4,5)

中的任何一个中,则计数

我想只计算product_seq_id同时退出“4”和“5”group_id

SELECT 
    `f`.`group_id`, count(distinct f.product_seq_id) as count
FROM
    filter f
        JOIN
    filter ff ON `ff`.`product_seq_id` = `f`.`product_seq_id`
        AND `f`.`group_id` IN (1,2,3)
        AND `ff`.`group_id` IN (4,5)
GROUP BY `f`.`group_id`

http://sqlfiddle.com/#!2/996c1/1

1 个答案:

答案 0 :(得分:0)

这是你在找什么?

select f123.GROUP_ID, count(f123.PRODUCT_SEQ_ID) from (select product_seq_id from filter where group_id=4) f4 inner join (select product_seq_id from filter where group_id=5) f5 on f4.product_seq_id = f5.product_seq_id inner join (select group_id, product_seq_id from filter where group_id<4) f123 on f123.product_seq_id = f5.product_seq_id group by GROUP_ID order by GROUP_ID

前两个子选择选择组4或5中的过滤器中的所有product_seq_id。仅当两个列表包含相同的product_seq_id时,这两个列表才连接在一起。 结果是所有product_seq_id,它们都在第4组和第5组(在本例中为11和20)

接下来,此结果与最后一个subselect连接,后者选择组1到3中的所有group_id和product_seq_id。只有当它们包含任何product_seq_id时才会加入它们,这是另一个连接的先前结果(所以如果它们包含product_seq_id 11或20)。结果如下:

Group_ID, Product_Seq_ID 1 11 3 20

然后,此结果按Group_ID分组,并计算每组中product_seq_id的数量

编辑:添加说明