Группировка и агрегация в запросах к SQL в Python
Столкнулся с проблемой, наверное синтаксиса, запроса к SQL в Python. СУБД PostgreSQL
Ошибки с кавычками и пробелами поправил, но все равыно вылезает:
AmbiguousFunction Traceback (most recent call last)
<ipython-input-133-ad82da23eca4> in <module>
29 THEN 'middle'
30 ELSE 'unknown'
---> 31 END''')
32 colnames = [desc[0] for desc in cursor.description]
33 records = cursor.fetchall()
AmbiguousFunction: function avg(unknown) is not unique
LINE 8: END ages_type, AVG('Pay Rate')
^
HINT: Could not choose a best candidate function. You might need to add explicit type casts.
Цель: получить средню зарплату по сотрудникам, разбитым на возрастные группы, обращаясь к SQL в Python. Таблица содержит 2 поля:
age: [30,34,31,32,30,30,33,33,31,39,63,38,32,46,31,34,31,29,33,33]
PayRate: [28.5,23.0,29.0,21.5,16.56,20.5,55.0,55.0,34.95,34.95,80.0,65.0,43.0,48.5,40.1,34.0,40.0,35.5,41.0,42.75]
Необходимо сгруппировать age по возрастам:
- до 33 (junior)
- от 33 до 99 (midle)
и для каждой группы рассчитать средний показатель PayRate
Делаю через case, но python ругается на синтаксис, подскажите пожалуйста где може быть ошибка. Нашел примеры где этот код работает при обращении к БД в терминале, но в Python не пашет
cursor.execute('''SELECT
CASE
WHEN age <= 33
THEN 'junior'
WHEN age > 33
THEN 'middle'
ELSE 'unknown'
END ages_type, AVG('Pay Rate')
FROM hr_dataset
GROUP BY
CASE
WHEN age <= 33
THEN 'junior'
WHEN age > 33
THEN 'middle'
ELSE 'unknown'
END''')
В результате должна получится табличка, с колонками:
- Type
- AVG_pay_rate
Где в Type будут указаны группы возрастов, в а AVG_pay_rate средний показатьль из pay_rate
Ответы (1 шт):
Ошибка в том, что аргумент в выражении AVG('Pay Rate') неправильный.
Во-первых, кавычки означают, что аргумент - строка. Функция AVG для строки не определена.
Тут конечно имелось ввиду среднее значение поля, а поле называется PayRate соотвественно должно быть без кавычек правильное имя поля, т.е. все вместе AVG(PayRate).