从同一查询的多个组中选择一行

时间:2019-03-19 18:31:42

标签: mysql sql

我有一个包含以下内容的行集:

id1           id2          value
--------------------------------
  1             1             50
  2             1             60
  3             1             70
  4             1             40
  5             1             53
 15             2             10
 16             2             19
 17             2             17
 18             2             13
 20             2             14
 40             3             32
 40             3             34
 44             3             54
 40             3             67
 43             3             80

在此行集中,我希望每个id2组的id1值具有最大值。像这样:

id1           id2          value
--------------------------------
  3             1             70
 16             2             19
 43             3             80

我只关心id1和id2,值列仅用于说明目的。

查询必须在MariaDB 5.5上运行。我一直在考虑这个问题,但是还没有找到一个下降的(和性能...)SQL查询。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

SELECT t.*
FROM sometable t
INNER JOIN (
    SELECT 
       id2,
       MAX(`value`) val
    FROM sometable
    GROUP BY id2
) t2
ON t.`value` = t2.val
   AND t.id2 = t2.id2

答案 1 :(得分:0)

想到一个相关的子查询:

select t.*
from t
where t.value = (select max(t2.value)
                 from t t2
                 where t2.id2 = t.id2
                );

为了提高性能,您希望在(id2, value)上建立索引。