Функция filter
используется только в подзапросах, которые указываются в селект листе SQL. Является указанием на то, нужно ли учитывать глобальные фильтры при выполнении подзапроса.
Запрос:
select
division,
round(count(*) *100 / (select count(*) from process), 2) as "% экз в разрезе филиала"
from process
group by division
order by "% экз в разрезе филиала" desc
extId | division |
---|---|
1 | North |
2 | West |
3 | South |
4 | North |
division | % экз в разрезе филиала |
---|---|
North | 50 |
West | 25 |
South | 25 |
Например, далее пользователь хочет наложить в системе фильтр на все виджеты division=West
. Количество экземпляров процессов в подзапросе не уменьшится, потому что этот фильтр не попадет туда.
Итоговый запрос с фильтром division=West
select
division,
round(count(*) *100 / (select count(*) from process), 2) as "% экз в разрезе филиала"
from process
where division='West'
group by division
order by "% экз в разрезе филиала" desc
division | % экз в разрезе филиала |
---|---|
West | 25 |
Если необходимо, чтобы общее количество экземпляров подчинялось правилу фильтра, то необходимо воспользоваться функцией filter()
внутри подзапроса.
Итоговый запрос с фильтром и функцией filter()
:
select
division,
round(count(*) *100 / (select count(*) from process where filter()), 2) as "% экз в разрезе филиала"
from process
where division='West'
group by division
order by "% экз в разрезе филиала" desc
division | % экз в разрезе филиала |
---|---|
West | 100 |