我有两张桌子。
Employee table
有两个属性。(employee_ID (PK), office_id)
Office table
有两个属性。 (office_id (PK), location)
。
我需要每个办公室的员工人数。
所以我写了以下查询。
SELECT COUNT(E.EMPLOYEE_ID), O.LOCATION
FROM REALSTATE.EMPLOYEE AS E, REALSTATE.OFFICE AS O
WHERE E.OFFICE_ID=O.OFFICE_ID
GROUP BY E.OFFICE_ID
我收到以下错误。 " Column reference 'O.LOCATION' is invalid, or is part of an invalid expression
"
答案 0 :(得分:0)
当您执行GROUP BY时,SELECT中的所有内容必须是聚合或GROUP BY。将COUNT和OFFICE_ID移动到子查询并将它们连接回主表。
您必须检查字段名称,看起来您在EFPLOYEE的OFFICE与OFFICE_ID上并不完全一致,但这应该适合您。
SELECT ECount, O.LOCATION
FROM (SELECT COUNT(E.EMPLOYEE_ID) as ECount, E.OFFICE
FROM REALSTATE.EMPLOYEE AS E
GROUP BY OFFICE) as C
INNER JOIN REALSTATE.OFFICE AS O on C.OFFICE=O.OFFICE_ID
基本前提是您构建一个中间表(C),其中包含办公室ID以及其中的人数,并将其加入OFFICE以解析与该ID相关联的办公室名称
编辑:@Gordon是正确的,当然,MySQL确实允许非标准行为,对不起红鲱鱼。但是尝试单独在括号内运行部件并使其运行,然后将其放回整个查询中并使其运行,当这一切都有效时,您可以将其缩回到较短的表示法。