首页 > 解决方案 > 按组中的最大值排序

问题描述

我有这个

Name   | Team     | Value
-------|----------|--------
A      | RED      |1
B      | BLUE     |2
C      | RED      |3
D      | BLUE     |4
E      | BLUE     |5

我需要这个:最大值较高的团队首先显示

Name   | Team     | Value
-------|----------|--------
B      | BLUE     |2
D      | BLUE     |4
E      | BLUE     |5
A      | RED      |1
C      | RED      |3

标签: mysqlsql-order-by

解决方案


  • 首先,找到Derived TableTeam中每个组的“Rank”(最大值)。 t2
  • 将此派生表与基于使用的表连接起来Team
  • 现在,按“排名”以降序和Name升序对结果进行排序。因此,具有最高最大值的 Team 行排在第一位,按其Name内部排序。

您可以尝试以下查询(替换your_table为您的实际表名):

SELECT t1.Name, 
       t1.Team, 
       t1.Value 
FROM your_table AS t1 
JOIN 
(
  SELECT t2.Team, 
         MAX(t2.Value) AS rank 
  FROM your_table AS t2 
  GROUP BY t2.Team 
) AS t2 ON t2.Team = t1.Team 
ORDER BY t2.rank DESC, t1.Name ASC 

推荐阅读