[MySQL]错误1248(42000):每个派生表都必须有自己的别名
我试图找出工艺长度的最大值/最小值/平均值/每个配方的步骤数以及使用配方的晶片数。 该表很大,并且是按时间单位记录的,因此存在大量重复数据,如配方或配方步骤。 这是我的代码,请帮助我:[MySQL]错误1248(42000):每个派生表都必须有自己的别名,mysql,sql,Mysql,Sql,我试图找出工艺长度的最大值/最小值/平均值/每个配方的步骤数以及使用配方的晶片数。 该表很大,并且是按时间单位记录的,因此存在大量重复数据,如配方或配方步骤。 这是我的代码,请帮助我: select distinct recipe as recipe_id, max(pl) as max_process_length, min(pl) as min_process_length, avg(pl) as avg_process_length, ma
select distinct
recipe as recipe_id,
max(pl) as max_process_length,
min(pl) as min_process_length,
avg(pl) as avg_process_length,
max(steps) as max_number_of_steps,
min(steps) as min_number_of_steps,
avg(steps) as avg_number_of_steps,
count(wfr_id) as number_of_wafers
into outfile 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/process_id.xls'
from 01m02train
group by recipe
having (
max(pl) = (
select max(pt)
from (
select count(time) as pt
from 01m02train
group by (recipe,wfr_id)
)
) as `maxpl`
and min(pl) = (
select min(pt)
from (
select count(time) as pt
from 01m02train
group by (recipe,wfr_id)
)
) as `minpl`
and avg(pl) = (
select avg(pt)
from (
select count(time) as pt
from 01m02train
group by (recipe,wfr_id)
)
) as `avgpl`
and max(steps) = (
select max(rs)
from (
select distinct count(recipe_step) as rs
from 01m02train
group by (recipe,wfr_id)
)
) as `maxrs`
and min(steps) = (
select min(rs)
from (
select distinct count(recipe_step) as rs
from 01m02train
group by (recipe,wfr_id)
)
) as `minrs`
and avg(steps) = (
select avg(rs)
from (
select distinct count(recipe_step) as rs
from 01m02train
group by (recipe,wfr_id)
)
) as `avgrs`
);
在having comparison子句中,放置的位置太多(),并且这些位置不会解析子查询的表名别名
having ( max(pl)=( <---- this must removed
select max(pt) from (
select count(time) as pt
from 01m02train
group by (recipe,wfr_id)
) <---- this must removed
) as `maxpl`
and min(pl)=( <---- this must removed
select min(pt) from (
select count(time) as pt
from 01m02train
group by (recipe,wfr_id)
)<---- this must removed
) as `minpl` and
.....
....
having(max(pl)=(在having comparison子句中,您放置的位置太多(),这些不会解析子查询的表名别名
having ( max(pl)=( <---- this must removed
select max(pt) from (
select count(time) as pt
from 01m02train
group by (recipe,wfr_id)
) <---- this must removed
) as `maxpl`
and min(pl)=( <---- this must removed
select min(pt) from (
select count(time) as pt
from 01m02train
group by (recipe,wfr_id)
)<---- this must removed
) as `minpl` and
.....
....
having(max(pl)=(主要问题:错误消息非常清楚,您需要对表达式中生成的派生表进行别名。另一方面,对条件进行别名是没有意义的。因此基本上:
max(pl) = (
select max(pt)
from (
select count(time) as pt
from 01m02train
group by (recipe,wfr_id)
)
) as `maxpl`
应将其拼写为:
max(pl) = (
select max(pt)
from (
select count(time) as pt
from 01m02train
group by (recipe,wfr_id)
) as `maxpl`
)
其他问题(它们不会产生错误,但在我看来,仍然值得注意):
group by
子句中枚举的列周围不需要括号(这是多余的)
having
子句中的条件也是如此(除非您将和
与或
混合在一起,而您不这样做)
select distinct
withgroupby
没有意义(两者本质上都是聚合)
以下是您的查询的更新版本:
select
recipe as recipe_id,
max(pl) as max_process_length,
min(pl) as min_process_length,
avg(pl) as avg_process_length,
max(steps) as max_number_of_steps,
min(steps) as min_number_of_steps,
avg(steps) as avg_number_of_steps,
count(wfr_id) as number_of_wafers
into outfile 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/process_id.xls'
from 01m02train
group by recipe
having
max(pl) = (
select max(pt)
from (
select count(time) as pt
from 01m02train
group by (recipe,wfr_id)
) as `maxpl`
)
and min(pl) = (
select min(pt)
from (
select count(time) as pt
from 01m02train
group by (recipe,wfr_id)
) as `minpl`
)
and avg(pl) = (
select avg(pt)
from (
select count(time) as pt
from 01m02train
group by (recipe,wfr_id)
) as `avgpl`
)
and max(steps) = (
select max(rs)
from (
select count(recipe_step) as rs
from 01m02train
group by (recipe,wfr_id)
) as `maxrs`
)
and min(steps) = (
select min(rs)
from (
select count(recipe_step) as rs
from 01m02train
group by (recipe,wfr_id)
) as `minrs`
)
and avg(steps) = (
select avg(rs)
from (
select count(recipe_step) as rs
from 01m02train
group by (recipe,wfr_id)
) as `avgrs`
)
;
主要问题:错误消息非常清楚,您需要对表达式中生成的派生表进行别名。另一方面,对条件进行别名是没有意义的。因此基本上:
max(pl) = (
select max(pt)
from (
select count(time) as pt
from 01m02train
group by (recipe,wfr_id)
)
) as `maxpl`
应将其拼写为:
max(pl) = (
select max(pt)
from (
select count(time) as pt
from 01m02train
group by (recipe,wfr_id)
) as `maxpl`
)
其他问题(它们不会产生错误,但在我看来,仍然值得注意):
group by
子句中枚举的列周围不需要括号(这是多余的)
having
子句中的条件也是如此(除非您将和
与或
混合在一起,而您不这样做)
select distinct
withgroupby
没有意义(两者本质上都是聚合)
以下是您的查询的更新版本:
select
recipe as recipe_id,
max(pl) as max_process_length,
min(pl) as min_process_length,
avg(pl) as avg_process_length,
max(steps) as max_number_of_steps,
min(steps) as min_number_of_steps,
avg(steps) as avg_number_of_steps,
count(wfr_id) as number_of_wafers
into outfile 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/process_id.xls'
from 01m02train
group by recipe
having
max(pl) = (
select max(pt)
from (
select count(time) as pt
from 01m02train
group by (recipe,wfr_id)
) as `maxpl`
)
and min(pl) = (
select min(pt)
from (
select count(time) as pt
from 01m02train
group by (recipe,wfr_id)
) as `minpl`
)
and avg(pl) = (
select avg(pt)
from (
select count(time) as pt
from 01m02train
group by (recipe,wfr_id)
) as `avgpl`
)
and max(steps) = (
select max(rs)
from (
select count(recipe_step) as rs
from 01m02train
group by (recipe,wfr_id)
) as `maxrs`
)
and min(steps) = (
select min(rs)
from (
select count(recipe_step) as rs
from 01m02train
group by (recipe,wfr_id)
) as `minrs`
)
and avg(steps) = (
select avg(rs)
from (
select count(recipe_step) as rs
from 01m02train
group by (recipe,wfr_id)
) as `avgrs`
)
;
简化问题(参见)。格式良好的SQL更容易阅读和编写。我修改了您的查询。如JARLH评论的,请考虑在下次发布之前自己做……简化问题(查看)。此外,格式良好的SQL更容易阅读和编写。我重新修改了您的查询。如JARLH评论的,请考虑在下次发布之前自己做。