gpt4 book ai didi

Mysql 同表中的匹配和计数

转载 作者:行者123 更新时间:2023-11-30 00:36:18 24 4
gpt4 key购买 nike

我在计算同一张表上具有某些条件的产品时遇到问题。

表结构:

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

这里,仅当product_seq_id也存在于两个(4,5)组id中时,我才想对group_id(1,2,3)计算不同的product_seq_id。

例如:

  • group_id -> 1 在 4,5 中找到了product_seq_id 11,因此不同计数为 1
  • group_id -> 2 没有找到任何内容
  • group_id -> 3 在 4,5 中找到了product_seq_id 20,因此不同计数为 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

最佳答案

这是您要找的吗?

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 时,这两个列表才会连接在一起。结果是第 4 组和第 5 组中的所有 Product_seq_id(在本例中为 11 和 20)

接下来,此结果与最后一个子选择连接,该子选择选择组 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 数量

编辑:添加说明

关于Mysql 同表中的匹配和计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22152528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com