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

SQL如何查询特定列值相同、其他指定列值不同的行记录

同产品同价格对应多售卖数量记录的SQL筛选方案

需求说明

  • 待查询数据表为Goods,包含三个字段:Product(产品)、Quantity(售卖数量)、Price(价格)
  • 筛选目标:返回所有同一产品维度下,相同价格对应至少2个不同售卖数量的原始记录
  • 排除范围:同一产品下,某价格仅对应唯一售卖数量的记录不返回

可直接复用的SQL写法

写法1:窗口函数实现(推荐,适配支持窗口函数的数据库:MySQL8.0+、PostgreSQL、SQL Server、Hive等)

SELECT Product, Quantity, Price
FROM (
    SELECT
        *,
        COUNT(DISTINCT Quantity) OVER (PARTITION BY Product, Price) AS match_flag
    FROM Goods
) tmp
WHERE match_flag >= 2;

逻辑说明:通过PARTITION BY Product, Price将数据按「同产品+同价格」分组,统计每个分组内不同售卖数量的个数,只要个数≥2就满足筛选条件,直接返回对应分组下的所有行即可。

写法2:子查询关联实现(适配不支持窗口函数的老版本数据库,如MySQL5.x)

SELECT g.*
FROM Goods g
INNER JOIN (
    SELECT Product, Price
    FROM Goods
    GROUP BY Product, Price
    HAVING COUNT(DISTINCT Quantity) >= 2
) match_group
ON g.Product = match_group.Product AND g.Price = match_group.Price;

逻辑说明:先通过GROUP BY聚合找出所有符合「同产品同价格下对应至少2个不同售卖数量」的(Product, Price)组合,再通过内连接关联原表,取出这些组合对应的全部原始记录,查询结果和窗口函数写法完全一致。

优化提示:如果表中不存在Product、Price、Quantity三个字段完全重复的冗余录入数据,可以把语句里的COUNT(DISTINCT Quantity)替换为COUNT(*),能进一步提升查询效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:48:44