如何在相关子查询中使用别名? [英] How to use an alias in Correlated subquery?

查看:87
本文介绍了如何在相关子查询中使用别名?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

mysql>从导师中选择*;+-------+------------+------------+---------+|身份证 |姓名 |部门名称 |工资|+-------+------------+------------+---------+|10101 |斯里尼瓦桑 |比较科学.|65000.00 ||12121 |吴|财务 |90000.00 ||15151 |莫扎特 |音乐 |40000.00 ||22222 |爱因斯坦 |物理 |95000.00 ||32343 |埃尔赛义德 |历史 |60000.00 ||33456 |黄金 |物理 |87000.00 ||45565 |卡茨 |比较科学.|75000.00 ||58583 |卡利菲利 |历史 |62000.00 ||76543 |辛格 |财务 |80000.00 ||76766 |克里克 |生物学 |72000.00 ||83821 |布兰特 |比较科学.|92000.00 ||98345 |金|电子英.|80000.00 |+-------+------------+------------+---------+

我有一个这样的 SQL 语句

从讲师 t1 中选择姓名、薪水、部门名称工资 >(选择平均(工资)来自老师 t2按部门名称分组有 t1.dept_name = t2.dept_name)+------------+------------+------------+|姓名 |工资|部门名称 |+------------+------------+------------+|吴|90000.00 |财务 ||爱因斯坦 |95000.00 |物理 ||卡利菲利 |62000.00 |历史 ||布兰特 |92000.00 |比较科学.|+------------+------------+------------+

我想在外部查询中添加一个 alias(dept_avg_salary) 但失败了.....

从教师 t1 中选择姓名、工资、部门名称、部门平均工资工资 >(选择 avg(salary) 作为 dept_avg_salary来自老师 t2按部门名称分组有 t1.dept_name = t2.dept_name)

<块引用>

错误 1054 (42S22):字段列表"中的未知列dept_avg_salary"

谁能告诉我为什么,非常感谢!

解决方案

您不能引用这样的别名.这是使用带有 join 的子查询的更好方法:

选择t1.name, t1.salary, t1.dept_name, t2.dept_avg_salary从教师 t1 加入 (选择部门名称,平均工资(薪水)dept_avg_salary来自导师按部门名称分组)t2 上 t1.dept_name = t2.dept_name其中 t1.salary >t2.dept_avg_salary

mysql> select * from instructor;

+-------+------------+------------+----------+
| ID    | name       | dept_name  | salary   |
+-------+------------+------------+----------+
| 10101 | Srinivasan | Comp. Sci. | 65000.00 |
| 12121 | Wu         | Finance    | 90000.00 |
| 15151 | Mozart     | Music      | 40000.00 |
| 22222 | Einstein   | Physics    | 95000.00 |
| 32343 | El Said    | History    | 60000.00 |
| 33456 | Gold       | Physics    | 87000.00 |
| 45565 | Katz       | Comp. Sci. | 75000.00 |
| 58583 | Califieri  | History    | 62000.00 |
| 76543 | Singh      | Finance    | 80000.00 |
| 76766 | Crick      | Biology    | 72000.00 |
| 83821 | Brandt     | Comp. Sci. | 92000.00 |
| 98345 | Kim        | Elec. Eng. | 80000.00 |
+-------+------------+------------+----------+

and I have a SQL statement like this

select name,salary,dept_name from instructor t1 
where salary > 
(
   select avg(salary) 
   from instructor t2
   group by dept_name   
   having t1.dept_name = t2.dept_name 
)
+-----------+----------+------------+
| name      | salary   | dept_name  |
+-----------+----------+------------+
| Wu        | 90000.00 | Finance    |
| Einstein  | 95000.00 | Physics    |
| Califieri | 62000.00 | History    |
| Brandt    | 92000.00 | Comp. Sci. |
+-----------+----------+------------+

I want to add an alias(dept_avg_salary) in outer query but fails.....

select name,salary,dept_name,dept_avg_salary from instructor t1 
where salary > 
(
   select avg(salary) as dept_avg_salary
   from instructor t2
   group by dept_name
   having t1.dept_name = t2.dept_name 
) 

ERROR 1054 (42S22): Unknown column 'dept_avg_salary' in 'field list'

can anybody tell me why and thank you very much!

解决方案

You cannot reference an alias like that. Here's a better approach using a subquery with a join:

select t1.name, t1.salary, t1.dept_name, t2.dept_avg_salary
from instructor t1 join (
    select dept_name, avg(salary) dept_avg_salary
    from instructor
    group by dept_name) t2 on t1.dept_name = t2.dept_name
where t1.salary > t2.dept_avg_salary

这篇关于如何在相关子查询中使用别名?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆