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

SQL GROUP BY分组时如何根据high_priority列优先选取value值

方案1:条件聚合法(全数据库兼容,改动最小)

你可以在原有GROUP BY的基础上配合CASE WHEN和COALESCE实现逻辑,不需要额外子查询:

SELECT
  COALESCE(MAX(CASE WHEN high_priority = TRUE THEN value END), MAX(value)) AS value,
  grouping
FROM the_table
GROUP BY grouping

逻辑说明:

  • 首先用CASE WHEN筛选出每个分组内高优先级条目的value,分组没有高优先级条目时这部分返回NULL
  • COALESCE会优先取第一个非空值:存在高优先级条目时直接返回对应value,不存在时就取分组的MAX(value),完全匹配需求。

方案2:窗口函数法(适合需要扩展取更多字段的场景)

如果你的数据库支持窗口函数(MySQL 8.0+/PostgreSQL/SQL Server等都支持),也可以用排序取首行的写法:

WITH ranked_data AS (
  SELECT
    value,
    grouping,
    ROW_NUMBER() OVER(
      PARTITION BY grouping 
      ORDER BY 
        CASE WHEN high_priority = TRUE THEN 1 ELSE 2 END, -- 高优先级排最前
        value DESC -- 同优先级按value倒序排
    ) AS rn
  FROM the_table
)
SELECT value, grouping
FROM ranked_data
WHERE rn = 1

两种方案对你的样例数据执行后都可以得到给出的预期输出。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:12:03