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

如何查询Article表中各颜色下重量最高产品的des_字段

查询每种颜色下重量最高产品的des_字段

表结构与需求

  • 表名:Article(对应英文product表)
  • 字段:
    • numArticle:主键(PK)
    • poids:产品重量(对应英文weight)
    • des_:产品名称/标识(对应英文Designation)
    • couleur:产品颜色(对应英文color)
  • 需求:获取每种颜色下重量最高的产品的des_字段值

原SQL的问题

你尝试的SQL语句如下:

SELECT des_
FROM Article
WHERE poids = ANY (SELECT  MAX(poids) 'poidse'
                   FROM Article
                   GROUP BY couleur);

该语句的核心问题是未关联颜色条件:子查询仅返回了各颜色的最大重量集合,但ANY匹配时,只要产品重量属于这个集合,无论它对应哪个颜色都会被选中。比如红色和蓝色的最大重量都是10时,所有重量为10的产品(红、蓝都会被包含),无法实现“每种颜色下重量最高”的精准匹配。

正确解决方案

方案1:关联子查询

通过子查询针对当前行的颜色,匹配该颜色下的最大重量:

SELECT des_
FROM Article a
WHERE poids = (
    SELECT MAX(poids)
    FROM Article
    WHERE couleur = a.couleur
);

此方法会为每个产品检查其所属颜色的最大重量,精准筛选出各颜色下的最重产品。

方案2:窗口函数(支持同重量多产品场景)

如果同一种颜色下存在多个重量相同的最重产品,可使用RANK()或ROW_NUMBER()窗口函数灵活处理:

-- 允许同颜色返回多个最重产品(同重量产品都保留)
SELECT des_
FROM (
    SELECT 
        des_,
        RANK() OVER (PARTITION BY couleur ORDER BY poids DESC) AS rank_num
    FROM Article
) t
WHERE rank_num = 1;

-- 每个颜色仅返回一个产品(同重量时按主键排序取第一个)
SELECT des_
FROM (
    SELECT 
        des_,
        ROW_NUMBER() OVER (PARTITION BY couleur ORDER BY poids DESC, numArticle) AS row_num
    FROM Article
) t
WHERE row_num = 1;

PARTITION BY couleur按颜色分组,ORDER BY poids DESC按重量降序排序,rank_num=1或row_num=1即可筛选出每组的目标产品。

方案3:JOIN+聚合子查询

先聚合得到各颜色的最大重量,再通过JOIN关联原表匹配对应产品:

SELECT a.des_
FROM Article a
INNER JOIN (
    SELECT couleur, MAX(poids) AS max_poids
    FROM Article
    GROUP BY couleur
) t ON a.couleur = t.couleur AND a.poids = t.max_poids;

子查询先计算每个颜色的最大重量,再通过颜色和重量的双重匹配,关联得到对应的des_字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:02:40