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

SQL查询求助:获取每个productId对应的最小googlePrice完整记录

解决获取每个productId对应最小googlePrice完整记录的问题

你用group by t.productId的写法存在问题:priceRaw、id、title这些列既不在group by子句中,也没有用聚合函数包裹,数据库无法确定要返回这些列的哪一行值,因此结果不符合预期。

下面提供两种通用的解决方案:

方案一:使用窗口函数(适用于MySQL 8.0+、PostgreSQL、SQL Server等支持窗口函数的数据库)

SELECT *
FROM (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY productId ORDER BY googlePrice ASC) AS rn
    FROM prices
) t
WHERE t.rn = 1;
  • 逻辑说明:PARTITION BY productId按产品ID分组,ORDER BY googlePrice ASC让每组内按价格升序排序,ROW_NUMBER()给每组的行依次编号,取rn=1的行就是每组最小googlePrice的记录。
  • 扩展:如果同一productId存在多条相同最小googlePrice的记录,想要保留所有符合的行,可将ROW_NUMBER()替换为RANK()或DENSE_RANK()。

方案二:子查询关联(兼容大部分旧版本数据库)

SELECT p.*
FROM prices p
INNER JOIN (
    SELECT productId, MIN(googlePrice) AS min_googlePrice
    FROM prices
    GROUP BY productId
) mp ON p.productId = mp.productId AND p.googlePrice = mp.min_googlePrice;
  • 逻辑说明:先通过子查询获取每个productId对应的最小googlePrice,再关联原表匹配产品ID和对应价格,从而得到完整的记录行。此方法会返回同一productId下所有符合最小价格的记录。

另外你最初的排序查询仅做了排序操作,没有过滤逻辑,因此无法直接得到每组最小价格的目标记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:32:10