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

如何在SQL中按ID分组计算所有字段的最大平均值?

解决多字段表按ID计算最大平均值的问题

嘿,我来帮你搞定这个需求!先理清楚两种常见的场景,你可以对照自己的实际情况来用:

场景1:先按ID分组算各字段平均值,再找每个字段的最大平均值

如果你的表中同一个ID对应多条记录,想要先算出每个ID下每个字段的平均值,再找出所有ID分组里每个字段的最大平均值,用下面的SQL就可以:

-- 第一步:按ID分组计算每个字段的平均值
WITH id_field_avgs AS (
    SELECT 
        ID,
        AVG(field1) AS avg_field1,
        AVG(field2) AS avg_field2,
        -- 这里依次把field3到field50都按这个格式写出来
        AVG(field50) AS avg_field50
    FROM your_table_name -- 替换成你的表名
    GROUP BY ID
)
-- 第二步:对每个字段的平均值取最大值
SELECT
    MAX(avg_field1) AS max_avg_field1,
    MAX(avg_field2) AS max_avg_field2,
    -- 同样把field3到field50的max_avg_xxx都写出来
    MAX(avg_field50) AS max_avg_field50
FROM id_field_avgs;

要是你的表每个ID只有一条记录,那平均值就是字段本身,这时候直接查每个字段的最大值就行:

SELECT
    MAX(field1) AS max_avg_field1,
    MAX(field2) AS max_avg_field2,
    -- 依次写出所有字段
    MAX(field50) AS max_avg_field50
FROM your_table_name;

场景2:针对每个ID,计算各字段的最大值和平均值

如果是想给每个ID单独统计它的每个字段的最大值和平均值,用这个SQL:

SELECT
    ID,
    MAX(field1) AS max_field1,
    AVG(field1) AS avg_field1,
    MAX(field2) AS max_field2,
    AVG(field2) AS avg_field2,
    -- 依次写出所有50个字段的max和avg
    MAX(field50) AS max_field50,
    AVG(field50) AS avg_field50
FROM your_table_name
GROUP BY ID;

小技巧:批量生成字段SQL(避免手动写50个字段)

50多个字段手动写太麻烦?可以用数据库的元数据自动生成需要的代码。比如在MySQL里,执行下面的语句就能得到所有字段的AVG/MAX语句:

-- 生成AVG语句(用于场景1的CTE部分)
SELECT CONCAT('AVG(', column_name, ') AS avg_', column_name, ',')
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = '你的数据库名' 
  AND table_name = '你的表名'
  AND column_name != 'ID'; -- 排除ID字段

把生成的结果复制到你的SQL里,删掉最后一行的逗号就搞定了,MAX语句同理,把AVG换成MAX就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:43:40