Функция 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 |