Страницы

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

суббота, 8 февраля 2020 г.

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

#sql


Есть такая таблица воздушных судов:

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


Подскажите, я на волоске от правильного решения или совсем не в ту сторону ушел? -_-
    


Ответы

Ответ 1



Что то в этом роде: 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)

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

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