Подсчитать подзапрос - PullRequest
0 голосов
/ 01 марта 2020

Я пытаюсь получить какой-то запрос, но у меня возникла проблема с моим счетом, где говорится, что я пропустил выражение, помогите

select d.kode, rpad(d.nama,75,' ') as "NAMA", lpad(count(th.fk_distributor),10,' ') as "JUMLAH"
from mh_distributor d 
join th_beli th on th.fk_distributor = d.kode
having count(td.fk_produk) > select avg("JUMLAH") as "AVERAGE" from(
    select d.nama,count(th.fk_distributor) as "JUMLAH"
    from mh_distributor d
    join th_beli th on th.fk_distributor = d.kode
    group by d.nama
)
group by d.nama, td.fk_produk, d.kode
order by d.kode asc;

, это мой запрос

Ответы [ 2 ]

1 голос
/ 01 марта 2020

Просто оберните ваш второй select оператор подзапросом:

select avg("JUMLAH") 
from(select d.nama,count(th.fk_distributor) as "JUMLAH"
     from mh_distributor d join 
          th_beli th on th.fk_distributor = d.kode
     group by d.nama
    ) t;

Итак, ваш полный оператор будет:

select d.kode, rpad(d.nama,75,' ') as "NAMA", 
      lpad(count(th.fk_distributor),10,' ') as "JUMLAH"
from mh_distributor d join 
     th_beli th 
     on th.fk_distributor = d.kode
having count(td.fk_produk) > (select avg("JUMLAH") 
                              from(select d.nama,count(th.fk_distributor) as "JUMLAH"
                                   from mh_distributor d join 
                                        th_beli th on th.fk_distributor = d.kode
                                   group by d.nama
                                 ) t
                             )
group by d.nama, td.fk_produk, d.kode
order by d.kode asc;
0 голосов
/ 01 марта 2020

Используйте оконные функции!

select nk.*
from (select d.kode, d.nama, count(*) as jumlah,
             avg(count(*)) over (partition by d.nama) as avg_jumlah
      from mh_distributor d join
           th_beli th
           on th.fk_distributor = d.kode
      group by d.nama, td.fk_produk, d.kode
     ) nk
where jumlah > avg_jumlah;

Я пропустил преобразование в строки, потому что я думаю, что это просто усложняет логику c - конечно, добавьте ее обратно во внешнюю запрос для вашего конкретного варианта использования.

Это должно иметь гораздо лучшую производительность, чем сложное предложение having.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...