postgresql 在SUM POSTGRES查询中,从条件创建的列的名称出错

cs7cruho  于 2023-01-13  发布在  PostgreSQL
关注(0)|答案(1)|浏览(108)

我尝试按部门获取员工总数,但查询中出现下一个错误

SELECT d.id_departaments, SUM(d.num_employees) AS "TOTAL"
FROM employees e, departamentos d
WHERE e.id_departament = d.id_departament AND
    "TOTAL" > 100
GROUP BY
    d.id_departament

我得到了下一个错误:
错误:列“TOTAL”不存在
我怎样才能让员工总数超过100人?

ecbunoof

ecbunoof1#

employeesdepartamentos之间的连接似乎是不必要的,因为您没有使用employees中的任何列来计算雇员的数量。另外,表departamentos有一个列来存储相关雇员的数量,这有点奇怪-它应该根据需要计算,而不是存储。
也就是说,您的查询应该是这样的

SELECT d.id_departament, count(e.id_departament) AS TOTAL
FROM departamentos d
JOIN employees e ON e.id_departament = d.id_departament
GROUP BY d.id_departament
HAVING count(e.id_departament) > 100

避免在WHERE子句中联接表。这不仅是一种非常旧的语法,使查询可读性较差,而且如果意外地在两个大表之间进行交叉联接,也会非常危险。请改用JOIN
演示:db<>fiddle

相关问题