2013-11-29 3 views
0

Я хочу, чтобы получить среднее значение столбца, где значение других столбцов 1 или 0 (я не могу использовать, где, очевидно)SQL СЛУЧАЙ сервера в AVG

select 
     avg(case 
       when 
        column2 = 1 
       then 
        column1 
       else 
        0 
       end) 
     as avg1, 
     avg(case 
       when 
        column2 = 0 
       then 
        column1 
       else 
        0 
       end) 
     as avg2 

Это не будет работать, так как это ниже среднего, потому что он равен нулю в позиции else.

Любой другой подобный способ?

Спасибо.

+0

@cha извините, я перепечатывать код, не вставил, не запятая, я отредактировал пост ... –

+2

Кроме того, я только что узнал, что нуль работает штраф вместо 0 –

+0

Если вы хотите, чтобы результаты в 2 строках использовали 'union' eg'select avg (column1) avgWhenCol2is1 из table_name, где column2 = 1 union select avg (column1) avgWhenCol2is0 из table_name, где column2 = 0' – Hussain

ответ

1

Допустим, у вас есть четыре значения в таблице, которые являются следующие:

+---------------------- 
+ Column1  Column2 
+--------------------- 
+ 100   0 
+ 50   0 
+ 40   1 
+ 80   1 

Если вы используете ELSE 0 это означает, что вы ставите 0 на этой колонке и, следовательно, считается как 1 и, следовательно, будет частью ваш делитель, когда вы в среднем. Итак, что вы будете иметь эту формулу

Total According Column2 Per Column2 criteria values OVER Total Number of Rows 

В случае выше у вас есть четыре (4) строк, и поэтому было бы так:

Пример Column2 = 1:

(40+80)/4 

.

Пример Column2 = 0:

(100+50)/4 

Который 37.5.

Однако, если вы используете ELSE NULL, это означает, что вы не включаете все строки, но только те, которые соответствуют критериям на WHEN.

В приведенном выше случае у вас есть два (2) по каждому критерию и поэтому станет делителем для вашей средней функции.

Пример Column2 = 1:

(40+80)/2 

Который .

Пример Column2 = 0:

(100+50)/2 

Который .

См Fiddle Demo

0
SELECT (column1 + column2)/
((CASE WHEN column1 = 0 THEN 0 ELSE 1 END) + 
(CASE WHEN column2 = 0 THEN 0 ELSE 1 END) + 
(CASE WHEN column1 = 0 AND column2 = 0 THEN 1 ELSE 0 END) AS Average 

Hope this Help!!!