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

时间:2020-10-14 09:20:19

标签: mysql sql

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", "low", "200"),

("C002", "Supplier_L", "high", "910"),
("C002", "Supplier_B", "mid", "370"),

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

预期结果:

     campaign    |     supplier      |     supplier_rating
-----------------|-------------------|-----------------------------
    C001         |    Supplier_A     |     high
    C001         |    Supplier_D     |     high
    C001         |    Supplier_F     |     low
-----------------|-------------------|-----------------------------
    C003         |    Supplier_Z     |     mid
    C003         |    Supplier_M     |     low
    C003         |    Supplier_C     |     high

在上面的示例中,我要查询所有包含campaignssuppliersupplier_rating的{​​{1}}。
满足此条件的所有low都应在结果中列出其相应的campaignssupplier


我尝试使用此查询:

supplier_rating

它接近结果,但不是显示每个SELECT campaign, supplier, supplier_rating, (CASE WHEN MAX(supplier_rating = 'low') OVER (PARTITION BY campaign) = 1 THEN 'low' ELSE supplier_rating END) AS supplier_evaluation2 FROM operations; 的每个supplier_rating,而是显示supplier的所有low的{​​{1}},并且也不显示排除suppliers

我该如何修改此查询以获得预期结果?

2 个答案:

答案 0 :(得分:2)

您可以使用存在

SELECT 
campaign,
supplier,
supplier_rating    
FROM operations t1    
WHERE exists  (SELECT 1 FROM operations t2 WHERE t1.campaign = t2.campaign
                        and t2.supplier_rating = 'low')

答案 1 :(得分:1)

不只是缺少的地方吗?还是我错过了什么?

SELECT 
campaign,
supplier,
supplier_rating

FROM operations

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