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

如何对GROUP BY分组后不同行执行不同聚合函数并格式化输出?

解决温度记录月度聚合与格式转换问题

假设你的Temperature_records表结构如下(包含日期和每日的最低、最高、平均温度字段):

CREATE TABLE Temperature_records (
    record_date DATE,
    min_temp INT,
    max_temp INT,
    avg_temp DECIMAL(5,2)
);

方案1:生成(month, data_type)分组的长表格式输出

如果需要按(月份, 数据类型)的分组形式输出(每行对应一个月份的一个温度类型),可以通过UNION ALL分别计算每个类型的月度聚合值,再合并结果:

-- 月度最低温度
SELECT
    MONTH(record_date) AS month,
    'min' AS data_type,
    ROUND(MIN(min_temp)) AS value
FROM Temperature_records
WHERE YEAR(record_date) = 2020
GROUP BY MONTH(record_date)

UNION ALL

-- 月度最高温度
SELECT
    MONTH(record_date) AS month,
    'max' AS data_type,
    ROUND(MAX(max_temp)) AS value
FROM Temperature_records
WHERE YEAR(record_date) = 2020
GROUP BY MONTH(record_date)

UNION ALL

-- 月度平均温度
SELECT
    MONTH(record_date) AS month,
    'avg' AS data_type,
    ROUND(AVG(avg_temp)) AS value
FROM Temperature_records
WHERE YEAR(record_date) = 2020
GROUP BY MONTH(record_date)

ORDER BY month, data_type;

逻辑说明:

  • 每个SELECT块单独处理一种温度类型的聚合:用MIN(min_temp)计算月度最低,MAX(max_temp)计算月度最高,AVG(avg_temp)计算月度平均
  • 用ROUND()函数对聚合结果四舍五入取整
  • 通过UNION ALL合并三个结果集,确保所有(month, data_type)组合都被覆盖
  • 最后按month和data_type排序,让结果更规整

方案2:生成宽表格式输出(每月一行,含三个温度指标)

如果需要将月度的三个指标放在同一行展示,可以直接按月份分组,同时计算三个聚合值:

SELECT
    MONTH(record_date) AS month,
    ROUND(MIN(min_temp)) AS monthly_min,
    ROUND(MAX(max_temp)) AS monthly_max,
    ROUND(AVG(avg_temp)) AS monthly_avg
FROM Temperature_records
WHERE YEAR(record_date) = 2020
GROUP BY MONTH(record_date)
ORDER BY month;

逻辑说明:

  • 直接按月份分组,在同一个SELECT中同时计算三种温度类型的月度值
  • 每个聚合函数对应正确的每日温度字段,并用ROUND()取整
  • 结果每行对应一个月份,包含三个温度指标列,适合需要横向查看月度数据的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 23:28:22