Страницы

Поиск по вопросам

четверг, 11 апреля 2019 г.

SQL запрос (GROUP BY, HAVING), выборка с одним типом записей

Есть такая таблица воздушных судов:
ak_code bnum craft_type AA RA-85205 T154 AA RA-85162 T154 AA RA-26305 AN26 BB RA-85343 T154 CC RA-96002 IL96 CC RA-96012 IL96 CC RA-96016 IL96
Мне надо одним запросом получить такие авиакомпании (ak_code), у которых есть более одного борта (bnum), но при этом все суда только одного типа (craft_type).
Пока придумал только это:
select ak_code,craft_type from crafts where ak_code in( select ak_code from crafts group by ak_code having count(bnum)>1 ) group by ak_code,craft_type
в результате чего получаем:
ak_code craft_type AA AN26 AA T154 CC IL96
Правильным должно быть
ak_code craft_type CC IL96
Подскажите, я на волоске от правильного решения или совсем не в ту сторону ушел? -_-


Ответ

Что то в этом роде:
select ak_code,craft_type from crafts where ak_code in( select ak_code from crafts group by ak_code having count(bnum)>1 -- Количество бортов более 1 (аналогично count(1)) and count(distinct craft_type)=1 -- Только один уникальный тип ВС ) group by ak_code,craft_type
Но если дословно следовать тексту и нужны только авиакомпании, то внутреннего подзапроса достаточно самого по себе. Внешний запрос уже выводит типы судов по найденным авиакомпаниям.
update: по предложениям pegoopik
select ak_code,max(craft_type) from crafts group by ak_code having count(bnum)>1 and max(craft_type)=min(craft_type)

Комментариев нет:

Отправить комментарий