Рассчитать среднее значение для каждой строки, а затем рассчитать среднее значение для столбца - PullRequest
0 голосов
/ 30 января 2019

У меня есть таблица, показанная ниже

Col1    Col2    Col3    Col4
NULL    NULL    NULL    54.84
NULL    NULL    NULL    75.40
57.24   73.61   NULL    NULL

Я хочу сначала вычислить среднее значение по строке, а затем вычислить окончательное среднее значение по столбцу

Таким образом, мое вычисление становится

    Row1Avg   54.84
    Row2Avg   75.40
    Row3Avg   65.42

И тогда я прихожу к окончательному среднему значению Row1Avg,Row2Avg,Row3Avg = 65.22

Может кто-нибудь подскажет, как добиться этого эффективным способом.Как я думал сделать это, у меня есть временная таблица с одним столбцом, где я храню AVG строк, а затем я просто взять среднее значение столбца временной таблицы.Было просто интересно, может ли быть лучший способ сделать это.

Ответы [ 3 ]

0 голосов
/ 30 января 2019

Я бы использовал cross apply и grouping sets:

select t.id, avg(row_avg)
from t cross apply
     (select avg(col) as row_avg
      from (values (col1), (col2), (col3), (col4)) v(col)
     ) s
group by grouping sets ( (id), () );

Выше предполагается, что у вас есть уникальный идентификатор для идентификации каждой строки.Если нет, то вам нужно что-то вроде union all:

with s as (
      select t.*, s.row_avg
      from t cross apply
           (select avg(col) as row_avg
            from (values (col1), (col2), (col3), (col4)) v(col)
           ) s
     )
select s.row_avg
from s
union all
select avg(s.row_avg)
from s;
0 голосов
/ 30 января 2019

Попробуйте с CROSS APPLY

SELECT 
    AVG(t2.Average)
FROM
    Table t1
    CROSS APPLY (
        SELECT Average = AVG(Value) 
        FROM (VALUES (Col1), (Col2), (Col3), (Col4)) B1(Value)
    ) t2

Результат равен 65.221666

0 голосов
/ 30 января 2019

То есть вам нужно среднее значение для каждой строки и каждого столбца?Я бы сделал два отдельных вычисления, одно для строки и другое для столбца.Прочитайте таблицу и найдите среднее значение для каждой строки, сохраните значения столбцов в таблицах или списках временных столбцов.

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