我在同一张桌子上有一些条件的计数产品遇到了麻烦..
表格结构:
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 ..
例如:
我已经尝试过以下查询它没有返回我期待 如果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`
答案 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的数量
编辑:添加说明