如果值多次存在并且满足每个条件一个条件,请列出所有值

美智

DB-Fiddle:

CREATE TABLE operations (
    id int auto_increment primary key,
    campaign VARCHAR(255),
    supplier VARCHAR(255),
    supplier_rating VARCHAR(255),
    quantity INT
);

INSERT INTO operations
(campaign, supplier, supplier_rating, quantity)
VALUES 
("C001", "Supplier_A", "high", "300"),
("C001", "Supplier_D", "high", "420"),
("C001", "Supplier_F", "mid", "200"),

("C002", "Supplier_A", "high", "180"),
("C002", "Supplier_D", "high", "612"),
("C002", "Supplier_F", "low", "367"),

("C003", "Supplier_L", "low", "763"),
("C004", "Supplier_G", "low", "478"),
("C005", "Supplier_B", "mid", "125"),

("C006", "Supplier_Z", "mid", "136"),
("C006", "Supplier_M", "low", "247"),
("C006", "Supplier_C", "high", "496");

预期成绩:

    campaign     |     supplier      |     supplier_rating
-----------------|-------------------|-----------------------------
    C002         |    Supplier_A     |        high
    C002         |    Supplier_D     |        high
    C002         |    Supplier_F     |        low
-----------------|-------------------|-----------------------------
    C006         |    Supplier_Z     |        mid
    C006         |    Supplier_M     |        low
    C006         |    Supplier_C     |        high

在上面的例子中,我想查询活动是
一个)有多个供应商
B),如果这些供应商中的至少一个具有supplier_rating low运动应与所有供应商的相应上市。


我试图去与htis查询:

SELECT 
campaign,
supplier,
supplier_rating
FROM operations
WHERE campaign IN 
      (SELECT 
      campaign 
      FROM operations 
      WHERE supplier_rating = 'low');

它几乎给了我预期的结果,但不排除C003C004
基本上,a)不考虑条件

我如何修改查询,以便在结果中显示条件a)和条件b)

戈登·利诺夫

假设供应商在广告活动中是唯一的,那么窗口功能是一个更简单的解决方案:

SELECT o.*
FROM (SELECT o.*,
             COUNT(*) OVER (PARTITION BY campaign) as num_supplier,
             SUM(supplier_rating = 'low') OVER (PARTITION BY campaign) as num_low
      FROM operations o
     ) o
WHERE num_supplier > 1 AND num_low > 0;

或者你也可以使用聚合来定义活动,然后使用INEXISTSJOIN得到原始行:

SELECT o.*
FROM operations o
WHERE o.campaign IN (SELECT o2.campaign
                     FROM operations o2
                     GROUP BY o2.campaign
                     HAVING COUNT(*) > 1 AND SUM(supplier_rating = 'low') > 0
                    );

是db <>小提琴。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使一个循环,命令用户输入查询保持一个值,直到如果条件满足,有一个try catch语句的援助?

如果每个值至少满足一个条件,则将一个值分配给所有其他值

如果满足每个条件一个条件,则列出所有值

GROUP BY如果组中的至少一个值满足条件,则创建组

如果一个键的所有记录都满足条件,如何返回一条记录?

如果不满足条件,则保留等于最后一个值的if / elif / else的numpy

如果满足条件,请替换列的后续值

如果满足条件,请取消选择同一客户的所有记录

Postgres查询,如果满足条件,则有条件地从记录子集中返回一个值

根据其他列中的值替换一个值,如果不满足条件则保留原样

如果满足多个条件,则将重复的单元格值计数为一个

即使再次满足相同条件也保持一个值

如果满足条件,则根据上一个非零值在“熊猫”列中填充零值

如何删除其中一个值满足条件的所有行?apply()不起作用

如果满足某些条件,则查找重复值;如果找不到,则查找下一个重复值的条件。

如果超过2/3满足一个值,则返回所有记录

如果至少一个单元格满足给定条件(例如,缺少值),则删除所有id行

如果所有行都满足相同条件,并且只有一个满足条件,则选择行

如果满足条件,则从python数据框中选择一个值

满足一个条件时选择所有组

Concur / Cognos 报告工作室 - 如果 culmn b 中的至少一个值满足条件,则显示 a 列中的所有项目

如果在同一查询中的另一结果行中满足条件,是否有办法减少一个结果行中的值

如果不满足至少一个条件,则消除所有标识符

如果条件满足,则重复数据帧的行,并更改一个值的值

如果两列满足一个条件,则返回其他列的计算值。熊猫 / 窗户

如果条件检查一个列表的所有值是否存在于另一个列表中

获取最后一个满足条件的可用值

如果满足另一个数组中值的条件,则对 numpy 数组中的值求和

如果所有列都满足条件,则返回一个值的 Excel 函数