Обновить

FETCH FIRST … ROWS WITH TIES

В этой статье я хочу показать новще решение распостраненной задачи. Найти в таблице записи с максимальным значением в одной из колонок.Для примера мы будем искать сотрудников с максимальной зарплатой.

Первое что приходит в голову - это ORDER BY salary DESC LIMIT 1 Логично но не правильно потому что максимальную зарплату мщгут получать несколько сотрудников.

Стандартное решение - сравнить зарплату с результатом подзапроса:

select * 
from employees
where salary = (select max(salary) from employees);

стандартно - не значит эффективно. Если наша СУБД поддерживает оконные функции:

with ranked as (
    select 
        employees.*,
        dense_rank() over (order by salary desc) r
    from employees
) select * from ranked where r = 1;

немного эффективней, но слишком многословно :(

Есть еще один вариант о котором знают не все. Стандарт SQL:2008 предлагает новое решение данной задачи: FETCH FIRST … ROWS WITH TIES :

select * 
from employees
order by salary desc
fetch first 1 rows with ties;

Компактно и элегантно. Проверить эти у другие запросы можно на SQLize.online

Всего голосов 14: ↑13 и ↓1+12
Комментарии2

OpenAI и Anthropic ограничили использование своих ИИ-моделей для создания бесплатных клонов платного ПО

Пользователи сообщили, что в OpenAI и Anthropic запретили использовать свои ИИ-модели для создания бесплатных клонов платных приложений. Например, Codex и Claude отказывается выполнять запрос под предлогом безопасности и без каких-либо объявлений от разработчиков. А вот в ChatGPT за попытку провести реверс-инженеринг приложения можно даже получить бан, включая работу с проектом REA: Reverse Engineer Anything, который позволяет клонировать любое приложение. Примечательно, что в DeepSeek такого ограничения нет.

OpenAI и Anthropic ограничили использование своих ИИ-моделей для создания бесплатных клонов платного ПО

Публикации