0

我正在对员工数据库运行查询。我想返回员工工资超过 $x 的行

SELECT 
    employees_table.employee_id, 
    employees_table.employee_name,
    (SELECT SUM(wages_table.wages)
     FROM wages_table
     WHERE wages_table.employee_id = employees_table.employee_id) AS wages
WHERE wages >= 100"

它正在返回“未知的列工资”

4

6 回答 6

2

我想你想要:

SELECT employees_table.employee_id,
  employees_table.employee_name,
  SUM(wages_table.wages) AS wages
FROM employees_tablee
INNER JOIN wages_table ON wages_table.employee_id = employees_table.employee_id
GROUP BY 1, 2
HAVING SUM(wages_table.wages) >= 100
于 2013-11-12T10:51:32.677 回答
1

您不能wages >= 100WHERE子句中使用别名。

我相信您只是在尝试进行JOIN查询GROUP BYHAVING然后,您可以使用允许别名的工资进行过滤:

SELECT 
    e.employee_id, 
    e.employee_name,
    SUM(w.wages) AS wages
FROM wages_table w
JOIN employee_table e ON w.employee_id = e.employee_id
GROUP BY e.employee_id
HAVING wages >= 100
于 2013-11-12T10:50:36.233 回答
0

尝试重写为:

select employees_table.employee_id, employees_table.employee_name, SUM(wages_table.wages)
from employees_table,
     wages_table 
where wages_table.employee_id = employees_table.employee_id
group by employees_table.employee_id, employees_table.employee_name
having SUM(wages_table.wages) >= 100
于 2013-11-12T10:54:25.153 回答
0

尝试这个

select * from (
SELECT employees_table.employee_id, employees_table.employee_name,
        (SELECT SUM(wages_table.wages)
           FROM wages_table
       WHERE wages_table.employee_id = employees_table.employee_id) AS wages
       )tmp where wages>=100
于 2013-11-12T10:52:40.313 回答
0

处理查询的步骤如下

1) 从声明

2) 在哪里

3) 选择

4) 订购方式

如您所见,Where 是在 Select 之前执行的。因此:选择中定义的所有别名在您的 Where 语句中尚不可用。一种解决方法是在 From 子句中使用内部选择,为您提供employee_id 及其工资总和。然后你可以稍后加入他们,你的别名就可以使用了。

于 2013-11-12T10:53:40.497 回答
0

您需要解释工资表和雇员表之间的关系。

如果一对一的关系:

SELECT employees_table.employee_id, employees_table.employee_name, wages_table.wages
FROM wages_table, employees_table
WHERE wages_table.employee_id = employees_table.employee_id
AND wages >= 100

如果是一对多的关系,GROUP BY并且SUM(wages_table.wages)需要像其他人所说的那样。

于 2013-11-12T10:57:00.260 回答