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

如何查询特定周内除Customer Type和Price外其余列重复的全量行

解决SQL筛选重复分组下全量记录的问题

没问题,我来帮你搞定这个需求!你需要的是找出那些Week、Customer、Product完全一致,但存在不同Customer Type和Price的所有原始记录,而不是只得到分组计数。这里有两种实用的SQL方案,你可以根据自己使用的数据库版本选择:

方案一:使用窗口函数(推荐,简洁高效)

如果你的数据库支持窗口函数(比如MySQL 8.0+、PostgreSQL、SQL Server 2012+等),这个方案最直观:

SELECT "Week", "Customer", "Product", "Customer Type", "Price"
FROM (
    SELECT 
        *,
        COUNT(DISTINCT "Customer Type") OVER (PARTITION BY "Week", "Customer", "Product") AS distinct_type_count
    FROM your_table_name
) AS grouped_data
WHERE distinct_type_count > 1;

逻辑说明:

  1. 子查询里用PARTITION BY按Week、Customer、Product分组,给每一行计算其所在分组内不同Customer Type的数量。
  2. 外层查询直接筛选出分组内不同类型数量大于1的所有行,就能得到你想要的全列原始记录。

方案二:子查询关联(兼容老版本数据库)

如果你的数据库不支持窗口函数(比如MySQL 5.x),可以先找出符合条件的分组,再关联原表获取全量记录:

SELECT t."Week", t."Customer", t."Product", t."Customer Type", t."Price"
FROM your_table_name t
INNER JOIN (
    SELECT "Week", "Customer", "Product"
    FROM your_table_name
    GROUP BY "Week", "Customer", "Product"
    HAVING COUNT(DISTINCT "Customer Type") > 1
) AS valid_groups
ON t."Week" = valid_groups."Week" 
AND t."Customer" = valid_groups."Customer" 
AND t."Product" = valid_groups."Product";

逻辑说明:

  1. 子查询先通过分组筛选出那些存在多种Customer Type的Week、Customer、Product组合。
  2. 用INNER JOIN把原表和这些有效分组关联,就能取出所有属于这些分组的原始记录。

注意:如果你的字段名包含空格(比如Customer Type),记得用对应数据库的标识符包裹(MySQL用反引号``,SQL Server用方括号[],PostgreSQL用双引号""),避免语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:42:48