SQL-запрос для вложенных min и max - PullRequest
0 голосов
/ 07 июня 2018

Я не уверен, правильно ли написан заголовок.В основном у меня есть данные, которые выглядят так:

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 голосов
/ 07 июня 2018

Вы можете сделать:

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
                   );

Здесь - это скрипта SQL.

Что приятно в этой версии, так это то, что она не имеет агрегации и может использовать преимуществаиндекса на (a, c, b).

0 голосов
/ 07 июня 2018
SELECT A, B, C
FROM [myTable]
ORDER BY C DESC, B ASC
LIMIT 1
0 голосов
/ 07 июня 2018

В sqlite простой однострочник будет:

select A, min(B), C from tableXXX group by C order by C desc;
0 голосов
/ 07 июня 2018

Вот один из подходов, использующий агрегирование с подзапросами:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...