查询同一表中相同Factor ID对应不同值的产品SQL语句需求
提取同一Factor ID下Y值不同的产品SQL查询
不需要通过连接两张表来实现,以下两种方法都可以直接从单表获取目标数据:
方法1:子查询筛选法
SELECT * FROM your_table WHERE X IN ( SELECT X FROM your_table GROUP BY X HAVING COUNT(DISTINCT Y) > 1 );
逻辑说明
- 内层子查询通过
GROUP BY X按Factor ID分组,COUNT(DISTINCT Y) > 1筛选出存在多种Y值的Factor ID。 - 外层查询直接拉取这些Factor ID对应的所有产品记录。
方法2:窗口函数法(适用于MySQL 8+、PostgreSQL、SQL Server等)
SELECT X, Y, product_name -- 替换为你实际需要的产品列 FROM ( SELECT X, Y, product_name, COUNT(DISTINCT Y) OVER (PARTITION BY X) AS distinct_y_count FROM your_table ) AS sub_query WHERE distinct_y_count > 1;
逻辑说明
- 窗口函数
COUNT(DISTINCT Y) OVER (PARTITION BY X)会为每条记录计算其所属Factor ID分组下的不同Y值数量。 - 外层筛选出数量大于1的记录,即为存在Y值差异的产品。
示例验证
假设你的表数据如下:
| X | Y | 产品 |
|---|---|---|
| 12 | 50 | A |
| 12 | 50 | B |
| 12 | 50 | C |
| 10 | 30 | D |
| 10 | 40 | E |
执行上述查询后,会返回X=10对应的D、E两条记录,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Aasiya Fathima
相关产品推荐
相关产品推荐

