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

如何编写SQL条件查询:按店铺颜色XXL存在性返回对应数据

SQL 查询:按店铺+颜色筛选夹克尺码(优先返回XXL)

需求说明

给定一张服装信息表(假设表名为jackets),包含ID、Shop、Jacket_Size、Jacket_Color字段,需要实现以下逻辑:

  • 对于同一Shop+Jacket_Color组合,若存在XXL尺码的夹克,仅返回该组合下的XXL尺码记录
  • 若该组合无XXL尺码,则返回该组合下的所有尺码记录

解决方案

方法一:使用窗口函数(推荐,性能更优)

利用窗口函数统计每个店铺+颜色组合中XXL尺码的数量,再根据统计结果筛选记录:

SELECT ID, Shop, Jacket_Size, Jacket_Color
FROM (
    SELECT 
        *,
        -- 按Shop和Color分组,统计每组中XXL的数量
        COUNT(CASE WHEN Jacket_Size = 'XXL' THEN 1 END) OVER (PARTITION BY Shop, Jacket_Color) AS has_xxl
    FROM jackets
) AS sub_query
-- 筛选逻辑:有XXL则只留XXL记录,无XXL则留所有记录
WHERE (has_xxl > 0 AND Jacket_Size = 'XXL') OR has_xxl = 0;

方法二:使用关联子查询

先提取所有存在XXL尺码的店铺+颜色组合,再通过左连接筛选符合条件的记录:

SELECT j.ID, j.Shop, j.Jacket_Size, j.Jacket_Color
FROM jackets j
LEFT JOIN (
    -- 找出所有包含XXL尺码的Shop+Color组合
    SELECT DISTINCT Shop, Jacket_Color
    FROM jackets
    WHERE Jacket_Size = 'XXL'
) AS xxl_combinations 
    ON j.Shop = xxl_combinations.Shop 
    AND j.Jacket_Color = xxl_combinations.Jacket_Color
-- 筛选逻辑:属于XXL组合则只留XXL记录,不属于则留所有记录
WHERE (xxl_combinations.Shop IS NOT NULL AND j.Jacket_Size = 'XXL') 
    OR xxl_combinations.Shop IS NULL;

示例验证

原表数据

IDShopJacket_SizeJacket_Color
1Shop AMBlack
2Shop AXXLBlack
3Shop ALBlue
4Shop BXLRed
5Shop BXXLRed
6Shop BSGreen
7Shop CMYellow
8Shop CLYellow

期望查询结果

IDShopJacket_SizeJacket_Color
2Shop AXXLBlack
3Shop ALBlue
5Shop BXXLRed
6Shop BSGreen
7Shop CMYellow
8Shop CLYellow

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:39:25