简体   繁体   English

MySQL - 选择一年中总和的最大值

[英]MySQL - select max value with of sum over year

I have table like:我有这样的表:

  v   | day | month | year
  1      1     1      1950
  2      2     1      1950
  3      3     1      1950
  1      1     2      1950
  1      1     2      1951
  2      1     2      1952

I have used this query to select MINs我已使用此查询来选择 MIN

SELECT SUM(v) AS sum_val, year, month
FROM `d`
GROUP BY year, month

This will result in这将导致

sum_val | year | month  
  6       1950     1
  1       1950     2
  1       1951     2 
  2       1952     2

How can I select max of sum_val with assigned year grouped by month?如何选择按月分组的指定年份的 sum_val 最大值? I have tried我试过了

SELECT (MAX(f.sum_val)) AS max_sum, f.year, f.month
FROM (
    SELECT SUM(v) AS sum_val, year, month
    FROM `d`
    GROUP BY year, month
) AS f
GROUP BY month

but this incorrectly assign year to value但这错误地将年份分配给价值

max_sum | year | month  
   6      1950    1
   2      1950    2   <--- should be 1952

SqlFiddle: http://sqlfiddle.com/#!9/ab23b4/6/0 SqlFiddle: http ://sqlfiddle.com/#!9/ab23b4/6/0

You could use some subquery baset on sum_val in join您可以在 join 中使用一些基于 sum_val 的子查询 baset

select t2.sum_val, t2.year, t2.month 
from (
    SELECT SUM(v) AS sum_val, year, month
    FROM `d`
    GROUP BY year, month
) t2 
INNER JOIN (
    select max(sum_val) max_val, year
    from (
        SELECT SUM(v) AS sum_val, year, month
        FROM `d`
        GROUP BY year, month
    )  t  
    group by year 
) t3  on t3.max_val = t2.sum_val    and t3.year  = t2.year

NB in ths way if you have two rows that match max val the query return two rows请注意,如果您有两行与 max val 匹配,则查询将返回两行

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM