SQL процент от средних - PullRequest
       12

SQL процент от средних

2 голосов
/ 23 февраля 2012

У меня есть таблица SQL Server Table_1 с name, subname, value столбцами

Для каждого вложенного имени я могу получить среднее значение по запросу:

select subname, AVG(value) as avg from Table_1 group by subname;

Я также могу получить сумму значений для каждого имени:

select name, sum(value) as sum from Table_1 group by name;

Мне нужен процент каждой строки avg для каждого из name, я не могу понять это.

РЕДАКТИРОВАТЬ: Например. процентов будет - среднее значение val1 составляет x% от общего среднего значения в a1

select * from Table_1 выглядит так:

name subname value  
a1  val1    20  
a1  val2    20  
a1  val3    10  
a1  val1    40  
a1  val2    30  
a2  2val3   90   
a2  2val1   80  
a2  2val2   30  
a2  2val3   90   
a2  2val1   80  
a2  2val1   630  

1 Ответ

1 голос
/ 23 февраля 2012
WITH data (name, subname, value) AS (
  SELECT 'a1',  'val1 ',   20  UNION ALL
  SELECT 'a1',  'val2 ',   20  UNION ALL
  SELECT 'a1',  'val3 ',   10  UNION ALL
  SELECT 'a1',  'val1 ',   40  UNION ALL
  SELECT 'a1',  'val2 ',   30  UNION ALL
  SELECT 'a2',  '2val3',   90  UNION ALL 
  SELECT 'a2',  '2val1',   80  UNION ALL
  SELECT 'a2',  '2val2',   30  UNION ALL
  SELECT 'a2',  '2val3',   90  UNION ALL 
  SELECT 'a2',  '2val1',   80  UNION ALL
  SELECT 'a2',  '2val1',   630  
)
SELECT
  name,
  subname,
  percentage = AVG(value) * 100 / SUM(AVG(value)) OVER (PARTITION BY name)
FROM data
GROUP BY
  name,
  subname
;

Вывод:

name subname percentage
---- ------- -----------
a1   val1    46
a1   val2    38
a1   val3    15
a2   2val1   68
a2   2val2   7
a2   2val3   23

Полезное чтение:

...