嵌套min和max的SQL查询

时间:2018-06-07 20:00:41

标签: mysql sql

我不确定标题是否措辞正确。基本上我有这样的数据:

A    B    C
1    10   0.6
1    11   0.6
1    12   1.0
1    13   1.0
2    5    0.6
2    4    0.6

我想选择一个C值最大的行。如果这导致重复的行,我将选择具有最低B值的那个

所以,我期待

A    B    C
1    12   1.0
2    4    0.6

对此有什么正确的SQL查询?

4 个答案:

答案 0 :(得分:1)

这是使用子查询聚合的一种方法:

select t1.a, min(t1.b) b, t2.c
from yourtable t1 
   join (select a, max(c) c
         from yourtable
         group by a) t2 on t1.a = t2.a and t1.c = t2.c
group by t1.a, t2.c

答案 1 :(得分:0)

你可以这样做:

select t.*
from t
where (t.b, t.c) = (select t2.b, t2.c
                    from t t2
                    where t2.a = t.a
                    order by t2.c desc, t2.b asc
                    limit 1
                   );

Here是一个SQL小提琴。

这个版本有什么好处,它没有聚合,可以利用(a, c, b)上的索引。

答案 2 :(得分:-1)

SELECT A, B, C
FROM [myTable]
ORDER BY C DESC, B ASC
LIMIT 1

答案 3 :(得分:-1)

在sqlite中,一个简单的单行代码将是:

select A, min(B), C from tableXXX group by C order by C desc;