首页 > 解决方案 > 显示每个唯一 ID 的所有重复最大值

问题描述

我有如下所示的数据表:

表格1:

 name | t2id  | percentage
-------------------------
  A   |  1    |    75
  B   |  1    |    75
  C   |  1    |    50
  D   |  2    |    30
  E   |  2    |    45
  F   |  2    |    45
  G   |  3    |    80
  H   |  3    |    70
  E   |  3    |    60

表2:

id  | name
-----------
 1  | NAME1
 2  | NAME2
 3  | NAME3

我得到了每个 t2id 的最大百分比,如下所示:

SELECT t1.name, t2.name, MAX(t1.percentage) AS MAX_p 
FROM table1 t1 INNER JOIN table2 t2 ON t1.t2id = t2.id GROUP BY t1.t2id;

输出:

t1.name | t2.name | MAX_p
--------------------------
   A    |  NAME1  |  75
   E    |  NAME2  |  45
   G    |  NAME3  |  80

现在我还尝试显示每个 t2id 的重复最大值,如下所示:

t1.name | t2.name | MAX_p
--------------------------
   A    |  NAME1  |  75
   B    |  NAME1  |  75
   E    |  NAME2  |  45
   F    |  NAME2  |  45
   G    |  NAME3  |  80

我似乎找不到解决方案,我一直在尝试使用子查询,但无法让它显示正确的输出。如果有人可以帮助我解决我将如何做这件事,将不胜感激

标签: mysqlsql

解决方案


这是标准 SQL,适用于所有版本的 MySQL(和其他 RDBMS)

SELECT t1.name AS t1name, t2.name AS t2name, t1.percentage
FROM table1 t1 
INNER JOIN table2 t2 ON t1.t2id = t2.id 
INNER JOIN 
    (SELECT t2id, MAX(percentage) AS MAX_p 
     FROM table1 t1
     GROUP BY t2id) m
  ON t1.t2id = m.t2id AND t1.percentage=m.MAX_p

推荐阅读