Дана таблица - table, с тремя полями
field1, field2, field3. Задача получить в одном запросе два значения:
Максимум поля
field1Значение поля
field2 в записи, где поле field3 максимально.Значения поля
field3 уникальны, так что оба ответа однозначны.Решить эти две задачи двумя запросами не проблема.
1)
SELECT MAX(field1) FROM table;2)
SELECT field2 FROM table
ORDER BY field3 DESC
LIMIT 1;или используем для второй задачи вариант с WHERE:
SELECT field2 FROM table
WHERE field3 = (SELECT MAX(field3) FROM table);Как получить оба в одном запросе
Есть два хорошо оптимизированных запроса (при условии что соответствующие индексы в наличии). У которых между собой ничего общего, кроме таблицы-источника, нет. Причём каждый запрос возвращает строго одну запись. В таких условиях решение по объединению очевидно. CROSS JOIN.
SELECT *
FROM (
SELECT MAX(field1) field1
FROM table
) t1
CROSS JOIN (
SELECT field2
FROM table
ORDER BY field3 DESC LIMIT 1
) t2
;Второй вариант
select
(select max(a) from tbl) as a,
b,
c
from tbl
order by c desc
limit 1Решение с CROSS JOIN работает на 10% быстрее.
👉 Пишите ваше решение в комментариях👇
@sqlhub