按两列分组并在另一列上排序时选择最大值

Selecting max value while group by two columns with order on another column

我有 4 行 table id season_id market elements 我想 select 为每个相同的 season_id 持有最大结果的市场,如果最大结果相同,则仅基于元素高于 9 的元素的最大值。

id  | season_id | market | result    | elements
 1  |    20     |   fh   |    75     |   20
 2  |    20     |   fh   |    75     |   22
 3  |    20     |   SH   |    81     |   18
 4  |    20     |   SH   |    75     |   20
 5  |    21     |   fh   |    90     |   14
 6  |    21     |   fh   |    86     |   16
 7  |    21     |   SH   |    90     |   18
 8  |    21     |   SH   |    91     |   2

我想得到

   id  | season_id | market | result    | elements
    2  |    20     |   fh   |    75     |   22
    3  |    20     |   SH   |    81     |   18
    5  |    21     |   fh   |    90     |   14
    7  |    21     |   SH   |    90     |   18

我试过了

  SELECT a.* FROM results a INNER JOIN (SELECT id, market, MAX(result) as perc FROM 
  results where elements>9 group by market ) group ON a.market = group.market and 
  a.result = group.perc group by market

但它并不是 select 所有市场,我不确定如何添加 selection 按元素数量

您似乎希望每个 season_id/market 对有一个结果。我不是 100% 确定 elements > 9 的限制应该做什么,但我认为这是一个整体过滤器。

要获取每个季节和市场的最大结果和元素的行,请使用 row_number():

select t.*
from (select t.*,
             row_number() over (partition by season_id, market order by result desc, elements desc) as seqnum
      from t
      where elements > 9
     ) t
where seqnum = 1;

Here 是一个 db<>fiddle.

在 MySQL 的旧版本(或更新的版本)中,您可以使用相关子查询:

select t.*
from t
where t.id = (select t2.id
              from t t2
              where t2.season_id = t.season_id and t2.market = t.market and
                    t2.elements > 9
              order by t2.result desc, t2.elements desc
              limit 1
             );