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

HAVING与GROUP BY用法疑问:如何用MAX(year)筛选最新年份数据

单条SQL实现各行业组最新年份碳足迹统计优化方案

问题原因

你之前的HAVING MAX(year) = year条件无效,核心原因是GROUP BY industry_group, year后,每个分组内的year是单一固定值,MAX(year)必然等于该分组的year,因此这个条件会匹配所有年份的分组,无法筛选出每个行业的最新年份数据。

优化方案

方案一:窗口函数实现(推荐,高效简洁)

利用窗口函数给每个行业的年份分组排序,直接筛选最新年份的统计结果:

SELECT industry_group,
       count_industry,
       total_industry_footprint
FROM (
    SELECT industry_group,
           COUNT(company) AS count_industry,
           ROUND(SUM(carbon_footprint_pcf), 1) AS total_industry_footprint,
           -- 按行业分组,年份倒序编号,最新年份为1
           ROW_NUMBER() OVER (PARTITION BY industry_group ORDER BY year DESC) AS rn
    FROM product_emissions
    GROUP BY industry_group, year
) t
WHERE rn = 1
ORDER BY total_industry_footprint DESC;

该方案适用于支持窗口函数的数据库(如MySQL 8.0+、PostgreSQL、SQL Server等),无需额外关联,性能更优。

方案二:子查询关联实现(兼容性强)

先获取每个行业的最新年份,再关联原表统计对应年份的数据:

SELECT p.industry_group,
       COUNT(p.company) AS count_industry,
       ROUND(SUM(p.carbon_footprint_pcf), 1) AS total_industry_footprint
FROM product_emissions p
-- 子查询获取每个行业的最新年份
INNER JOIN (
    SELECT industry_group, MAX(year) AS latest_year
    FROM product_emissions
    GROUP BY industry_group
) t ON p.industry_group = t.industry_group AND p.year = t.latest_year
GROUP BY p.industry_group, p.year
ORDER BY total_industry_footprint DESC;

该方案兼容性更好,适合不支持窗口函数的低版本数据库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:35:20