Как можно применить AVG () к строке вместо столбца? - PullRequest
0 голосов
/ 28 мая 2020
• 1000 чтобы добавить 7-й столбец, в котором AVG всех значений столбцов 1, 2, 3, 4, 5 и 6 для данной строки c является «усредненным»

Обратите внимание, что некоторые данные может иметь значение NULL

Ответы [ 3 ]

2 голосов
/ 28 мая 2020

Вы можете использовать arithmeti c:

select (column1 + column2 + column3 + column4 + column5 + column6) / 6

Если вы хотите добавить это в таблицу, вы можете использовать вычисляемый столбец:

alter table t add column column7 as 
    (column1 + column2 + column3 + column4 + column5 + column6) / 6);

Я должен отметить, что если любое из значений равно NULL, возвращаемое значение будет NULL. Это можно исправить, но все ваши образцы данных не NULL.

0 голосов
/ 29 мая 2020

но деление всегда будет 6, что повлияет на математический результат - Houssem Timoumi

вы должны ввести немного больше:

alter table t add  column7 as 
( ( ISNULL (column1, 0)
  + ISNULL (column2, 0)
  + ISNULL (column3, 0)
  + ISNULL (column4, 0)
  + ISNULL (column5, 0)
  + ISNULL (column6, 0)
  )  
  / CASE  WHEN column1 IS NULL THEN 0 ELSE 1 END  
  + CASE  WHEN column2 IS NULL THEN 0 ELSE 1 END  
  + CASE  WHEN column3 IS NULL THEN 0 ELSE 1 END  
  + CASE  WHEN column4 IS NULL THEN 0 ELSE 1 END  
  + CASE  WHEN column5 IS NULL THEN 0 ELSE 1 END  
  + CASE  WHEN column6 IS NULL THEN 0 ELSE 1 END  
);
0 голосов
/ 28 мая 2020

Еще одна дополнительная опция - VALUES конструктор значений таблицы:

SELECT 
   t.*,
   Column7 = (
      SELECT AVG(x) 
      FROM (VALUES (Column1), (Column2), (Column3), (Column4), (Column5), (Column6)) v(x)
   )
FROM YourTable t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...