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
在上面的示例中,我要查询所有包含campaigns
和supplier
和supplier_rating
的{{1}}。
满足此条件的所有low
都应在结果中列出其相应的campaigns
和supplier
。
我尝试使用此查询:
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
。
我该如何修改此查询以获得预期结果?
答案 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')