基于multiactualusetest表编写MySQL分组标记最大值的查询语句
单条MySQL查询实现分组内最大值标记(兼容无窗口函数/CTE环境)
解决方案代码
SELECT t.TAXDECNUM, t.ACTUALUSE, CASE WHEN t.MARKETVALUE = m.max_market THEN 1 ELSE 0 END AS COUNTX, t.TAXABLE, t.MARKETVALUE, t.ASSESSEDVALUE FROM ( -- 按TAXDECNUM和ACTUALUSE完成基础汇总 SELECT TAXDECNUM, ACTUALUSE, ANY_VALUE(TAXABLE) AS TAXABLE, -- 若同一分组内TAXABLE值统一,用ANY_VALUE/MAX/MIN均可 SUM(MARKETVALUE) AS MARKETVALUE, SUM(ASSESSEDVALUE) AS ASSESSEDVALUE FROM multiactualusetest GROUP BY TAXDECNUM, ACTUALUSE ) t JOIN ( -- 计算每个TAXDECNUM对应的最大MARKETVALUE SELECT TAXDECNUM, MAX(MARKETVALUE) AS max_market FROM ( SELECT TAXDECNUM, SUM(MARKETVALUE) AS MARKETVALUE FROM multiactualusetest GROUP BY TAXDECNUM, ACTUALUSE ) g GROUP BY TAXDECNUM ) m ON t.TAXDECNUM = m.TAXDECNUM ORDER BY t.TAXDECNUM, t.MARKETVALUE DESC;
代码说明
- 基础汇总子查询
t:先对原始表multiactualusetest按TAXDECNUM和ACTUALUSE分组,汇总MARKETVALUE和ASSESSEDVALUE,同时通过ANY_VALUE(或MAX/MIN)获取TAXABLE字段值(需保证同一分组内该字段值逻辑一致)。 - 最大值计算子查询
m:先做同样的分组汇总,再按TAXDECNUM分组提取每组的最大MARKETVALUE。 - 主查询关联与标记:通过
TAXDECNUM关联两个子查询,用CASE语句判断当前行的MARKETVALUE是否等于对应分组的最大值,以此设置COUNTX为1或0。
适配说明
- 全程使用嵌套子查询,未使用CTE、窗口函数(OVER/PARTITION)或多语句临时表,完全兼容PhpMyAdmin环境要求。
- 若你的数据源已经是预先汇总好的表(而非原始明细),可直接去掉最内层的汇总逻辑,替换为汇总表的查询。
内容的提问来源于stack exchange,提问作者CAD CDO
相关产品推荐
相关产品推荐

