Как решить этот запрос, мне нужна функция? - PullRequest
0 голосов
/ 24 апреля 2020

Мне нужно найти производителя, который производит больше принтеров, чем ноутбуков или ПК.

 maker   |  type    |  models
 HP      |  laptop  |   7
 Lenovo  |  PC      |   5
 Sharp   |  Printer |   13
 Kyocera |  Printer |   8
 Dell    |  Laptop  |   5

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Вы можете подойти к этому разными способами. Один метод, использующий коррелированные подзапросы:

select maker
from t
where type = 'Printer' and
      models > (select t2.models from mytable t2 where t2.maker = t.maker and t2.type = 'laptop') and
      models > (select t2.models from mytable t2 where t2.maker = t.maker and t2.type = 'type');

Одна вещь, которую вы можете сделать с этим подходом, легко распространить его на любое количество моделей. , , с настройкой:

select maker
from t
where type = 'Printer' and
      models > (select max(t2.models)
                from mytable t2
                where t2.maker = t.maker and t2.type <> 'Printer'
               ) ;

Или, если хотите:

select maker
from t
where type = 'Printer' and
      models > all (select t2.models
                    from mytable t2
                    where t2.maker = t.maker and t2.type <> 'Printer'
                   ) ;
1 голос
/ 24 апреля 2020

Вы можете использовать агрегацию и фильтр с предложением, имеющим:

select maker
from mytable
group by maker
having 
    sum(case when type = 'Printer' then models else 0 end) 
        > sum(case when type = 'laptop' then models else 0 end)
    and sum(case when type = 'Printer' then models else 0 end) 
       > sum(case when type = 'PC' then models else 0 end)
...