2015-05-07 3 views
0

Предположим, у меня есть таблица, и она имеет следующие столбцы:Вычислить среднее значение с заданными значениями SQL

assignment_id, employee.id, employee_salary и employee_performance

(assignment_id - INT, employee.id - INT, employee_salary - int, employee_performance - varchar).

Столбец employee_performance состоит из следующих значений: отличный, хороший, средний, плохой, нулевой. Я хочу присвоить целые числа значениям и рассчитать среднюю производительность сотрудника на разных рабочих местах. Как я могу это сделать?

Например, какой-то сотрудник выполнил два задания, и его результаты: отличные и хорошие. Поручаю 10 к отлично и 9 к хорошему и получать в среднем 9

 
assignment_id, employee.id, employee_salary employee_performance 
1     1   100,000   excellent 
2     1   100,000   excellent 
3     1   100,000   good 
4     4    50,000   good 
5     3    75,000   null 

Null means that an assignment is not yet completed.

Я хочу, чтобы присвоить целые числа в employee_performance. Например, отлично - 10, хороший - 9 и т.д.

Результат должен:

 
eployee.id   average_performance 
1      9,7 
3      9      

epmployee.id = 4 не входит, так как он не выполнили задания.

+0

Можете ли вы предоставить образцы данных и желаемые результаты? Вы смотрите на средний рейтинг производительности на одного сотрудника? – sgeddes

ответ

0

Вы можете использовать case. Нечто подобное:

select employee_id, 
     avg(case when employee_performance = 'excellent' then 4.0 
       when employee_performance = 'good' then 3.0 
       when employee_performance = 'average' then 2.0 
       when employee_performance = 'bad' then 1.0 
      end) as avg_performance 
from table 
group by employee_id; 
0

Вы можете создать таблицу 2 столбца, который содержит каждую производительность (т.е. отлично, хорошо, и т.д.) и его соответствующее значение.

------------------------------ 
|performance  |  value| 
------------------------------ 
|excellent  |  10 | 
------------------------------ 
|good   |  9 | 
------------------------------ 

После того, как у вас есть эта таблица, вы можете сделать простое объединение и группу, чтобы получить среднее значение для каждого сотрудника.

select id, avg(pv.value) 
from employees e 
left join performance_values pv 
    on pv.performance = e.employee_performance 
group by id