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

查询同产品描述下价格无变动的所有产品ID

查询同产品描述下价格无变动的所有产品ID

嘿,我完全get到你的需求了——就是要找出那些同一个产品描述下所有记录价格都完全一致的产品ID对吧?比如你举的例子里,所有Apple对应的ProductID都要返回,而Pear因为有不同价格就排除掉,没问题,咱们来搞定它~

核心思路

先找出所有满足「同ProductDesc下Price唯一」的产品描述,再把这些描述对应的所有ProductID捞出来就行,这里给你两种常用的实现方式:

方法一:分组筛选+关联查询(通用SQL,几乎所有数据库都支持)

这种方法先通过子查询筛选出符合条件的产品描述,再关联原表获取对应的ID:

SELECT pt.ProductID
FROM ProductsTable pt
INNER JOIN (
    -- 筛选出所有只有一种价格的产品描述
    SELECT ProductDesc
    FROM ProductsTable
    GROUP BY ProductDesc
    HAVING COUNT(DISTINCT Price) = 1
) AS ValidDescs ON pt.ProductDesc = ValidDescs.ProductDesc;

解释:子查询里用GROUP BY ProductDesc把同描述的记录归为一组,HAVING COUNT(DISTINCT Price) = 1确保这个组里的价格去重后只有1个(也就是所有价格都一样),之后关联原表就能拿到所有符合要求的ProductID了。

方法二:窗口函数实现(适合支持窗口函数的数据库,如MySQL8+、SQL Server、PostgreSQL等)

这种写法更直观,用窗口函数直接计算每个产品描述下的价格种类数,再筛选:

SELECT ProductID
FROM (
    SELECT 
        ProductID,
        ProductDesc,
        -- 按产品描述分组,计算组内不同价格的数量
        COUNT(DISTINCT Price) OVER(PARTITION BY ProductDesc) AS PriceCount
    FROM ProductsTable
) AS PriceCheck
WHERE PriceCount = 1;

解释:窗口函数COUNT(DISTINCT Price) OVER(PARTITION BY ProductDesc)会给每一行标记出它所属产品描述下的价格种类数,最后只筛选出种类数为1的行,对应的就是价格无变动的产品ID。

拿你给的测试数据来验证的话,Apple对应的PriceCount是1,所以所有Apple的ID都会被选中;Pear的PriceCount是2,就会被排除,完全符合你的需求~

备注:内容来源于stack exchange,提问作者UhhhhhIdk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 10:50:30