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

如何用SQL实现多值选取并保留同组较大值的查询

分组合并标签并保留最大值的SQL实现

核心思路是先将需要合并的标签归类到同一分组,再对每个分组取Value的最大值。以下分场景给出实现方案:

场景1:所有带-的标签均按-前的前缀合并

比如A3-1、A3-2合并为A3,若有B2-1也会合并为B2,不同数据库的实现如下:

MySQL / MariaDB

SELECT
  SUBSTRING_INDEX(TagName, '-', 1) AS GroupedTagName,
  MAX(Value) AS MaxValue
FROM
  your_table_name
GROUP BY
  SUBSTRING_INDEX(TagName, '-', 1);

SUBSTRING_INDEX会将TagName按-分割,取第一个部分作为分组依据,自动将同前缀的标签归为一组。

SQL Server

SELECT
  CASE 
    WHEN CHARINDEX('-', TagName) > 0 THEN LEFT(TagName, CHARINDEX('-', TagName) - 1)
    ELSE TagName
  END AS GroupedTagName,
  MAX(Value) AS MaxValue
FROM
  your_table_name
GROUP BY
  CASE 
    WHEN CHARINDEX('-', TagName) > 0 THEN LEFT(TagName, CHARINDEX('-', TagName) - 1)
    ELSE TagName
  END;

通过CHARINDEX判断是否包含-,存在则截取左侧部分作为分组键,否则保留原标签。

PostgreSQL

SELECT
  SPLIT_PART(TagName, '-', 1) AS GroupedTagName,
  MAX(Value) AS MaxValue
FROM
  your_table_name
GROUP BY
  SPLIT_PART(TagName, '-', 1);

SPLIT_PART按-分割字符串并取第一部分,实现同前缀标签的分组。

场景2:仅特定标签需要合并(如仅A3-1、A3-2)

如果只有指定标签需要合并,其他带-的标签保持原样,用CASE语句精准控制分组:

SELECT
  CASE
    WHEN TagName IN ('A3-1', 'A3-2') THEN 'A3'
    ELSE TagName
  END AS GroupedTagName,
  MAX(Value) AS MaxValue
FROM
  your_table_name
GROUP BY
  CASE
    WHEN TagName IN ('A3-1', 'A3-2') THEN 'A3'
    ELSE TagName
  END;

这种方式不会影响其他标签的原有分组逻辑,仅对目标标签合并取最大值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:20:48