Как получить среднее количество элементов выше предела, которые не равны нулю - PullRequest
0 голосов
/ 06 августа 2020

Как я могу получить среднее количество элементов выше предела (sigma), которые не равны нулю.

  • первая таблица содержит ограничение
  • вторая таблица содержит значения
  • Для каждой группы name из второй таблицы я хочу получить среднее количество элементов, которые не равны нулю и превышают предел (предел хранится в первой таблице)

для Например, для следующих входов:

layer table:

l_id | l_name  |sigma
---------------------
1    |  ll_a   | 15
2    |  ll_b   | 25

names table:

a_id | name | ss
----------------
1    |  a   | 13
2    |  b   | 14
3    |  b   | null
4    |  a   | 20
5    |  a   | null
6    |  a   | null
7    |  a   | 50
8    |  a   | 51

обязательный результат:

name | l_name  | avg
---------------------
a    |  ll_a   | 0.75   = (4 elements not null, 3 of them above 15)
a    |  ll_b   | 0.50   = (4 elements not null, 2 of them above 20)
b    |  ll_a   | 0.00   = (1 element not null, 0 of them above 15)
b    |  ll_b   | 0.00   = (1 element not null, 0 of them above 20)

1 Ответ

2 голосов
/ 06 августа 2020

Вы можете использовать условное агрегирование. В Postgres это выглядит так:

select n.name, l.l_name,
       sum( (n.ss > l.sigma)::int ) * 1.0 / count(*)
from layer_table l cross join
     names_table n
group by n.name, l.l_name;

В MySQL единственное изменение:

       sum( (n.ss > l.sigma)) * 1.0 / count(*)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...