You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在存在Lidl德国行时过滤Lidl奥地利行,保留其他品牌奥地利行

实现思路与SQL方案

核心逻辑拆解:只针对Lidl品牌做特殊处理——如果该品牌同时存在Germany和Austria的记录,仅保留Germany行、剔除Austria行;其他品牌的所有记录(包括Austria行)全部保留。

方案一:用EXISTS子句直接过滤

这种写法逻辑直观,直接针对需要剔除的特定场景做判断:

SELECT Brand, Country
FROM your_table
WHERE NOT (
    Brand = 'Lidl' 
    AND Country = 'Austria'
    -- 仅当Lidl存在Germany记录时,才剔除对应的Austria行
    AND EXISTS (
        SELECT 1 
        FROM your_table t2 
        WHERE t2.Brand = 'Lidl' 
        AND t2.Country = 'Germany'
    )
)

原理:只有同时满足「是Lidl的Austria行」且「该品牌存在Germany行」这两个条件的记录才会被过滤,其他所有记录都保留。

方案二:用窗口函数标记辅助列

适合需要扩展更多品牌规则的场景,可维护性更强:

WITH brand_status AS (
    SELECT 
        *,
        -- 给每个品牌标记是否存在Germany的记录
        MAX(CASE WHEN Country = 'Germany' THEN 1 ELSE 0 END) OVER (PARTITION BY Brand) AS has_germany
    FROM your_table
)
SELECT Brand, Country
FROM brand_status
WHERE 
    -- 非Lidl品牌直接保留所有行
    Brand <> 'Lidl'
    -- Lidl品牌仅保留Germany行,或该品牌无Germany记录时保留Austria行
    OR (Brand = 'Lidl' AND (Country = 'Germany' OR has_germany = 0))

原理:先通过窗口函数给每个品牌分组,判断该品牌是否有Germany的记录;再基于标记的辅助列,对Lidl品牌做针对性过滤,其他品牌不受影响。

内容的提问来源于stack exchange,提问作者Hans Peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 16:15:30