我有 3 列:
- 学院 (cname , state , enrollment)
- 学生 (sid , sname , gpa , sizehs )
- 申请(sid , cname , major , decision )
我试过这个查询:
select j.major , max(j.gpa)
from (select s.* , a.cname , a.major, a.decision
from student s join apply a on s.sid = a.sid and decision = 'y') j
group by major
这行得通。但是当我再添加一个 feild 来选择时,它会中断:
select major , sname , max(gpa) , (select avg(gpa) from j) as avg -- trouble
from (select s.* , a.cname , a.major, a.decision
from student s join apply a on s.sid = a.sid and decision = 'y') j
group by major
having max(gpa) < avg;
我收到一条错误消息:表 j 不存在。为什么会这样?
如果 j 不存在,那么在第一个查询中,当我说 j.gpa
等时,它会起作用。
我的目标是找到申请人的最高 GPA 低于平均水平的专业
,我做了一个有效的查询:
select major , sname , student.sid , gpa ,
(select round(avg(gpa),5) as avg from student join apply
on student.sid = apply.sid and decision='Y') as avg
from student join apply on student.sid = apply.sid and decision='Y'
group by major
having max(gpa) < avg
但在这里,我必须在 select
和 from
中键入连接部分。我希望有一些方法可以跳过必须两次键入连接部分,所以我想出了上面的(错误的)查询。
任何帮助都会很棒。
最佳答案
试试这个:
SELECT major,
sname,
Max(gpa),
Avg(gpa) AS avg_gpa
FROM (SELECT s.*,
a.cname,
a.major,
a.decision
FROM student s
JOIN apply a
ON s.sid = a.sid
AND a.decision = 'y') j
GROUP BY major
HAVING Max(gpa) < avg_gpa;
这是因为 j 是选择查询的别名,您在初始化它之前在上面的选择查询中使用了它。首先它将执行子查询,然后从那里选择列。并且找不到这张表。
关于mysql - 收到错误 : table doesn't exist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20994166/