错误代码 1248,SQL 状态 42000:每个派生的 table 必须有自己的别名
Error code 1248, SQL state 42000: Every derived table must have its own alias
我 运行 这个查询 MySQL。
Select Vendor, sum(Rate) as Rate
from (select case Vendor when 'NSN' then 'Nokia' else Vendor end as Vendor, Rate
from ( Select vendor ,(count(1) )*100/(Select count(id_incident)from incident where open_time between '2015-01-01'and'2015-01-30') as Rate from incident where open_time between '2015-01-01'and'2015-01-30'group by upper (vendor) )) as y group by vendor;
它给出了这个错误:
Error code 1248, SQL state 42000: Every derived table must have its own alias".
有什么问题?
您忘记为内部子查询指定别名。我选择了x
Select Vendor, sum(Rate) as Rate
from
(
select case Vendor when 'NSN' then 'Nokia' else Vendor end as Vendor, Rate
from
(
Select vendor ,(count(1) )*100/(Select count(id_incident)from incident where open_time between '2015-01-01'and'2015-01-30') as Rate
from incident
where open_time between '2015-01-01'and'2015-01-30'
group by upper (vendor)
) as x
) as y
group by vendor;
您的查询比需要的复杂得多:
Select (case when vendor = 'NSN' then 'NOKIA' else upper(vendor) end) as vendor,
count(*)*100 / overall.cnt as Rate
from incident i cross join
(Select count(*) as cnt
from incident
where open_time between '2015-01-01'and'2015-01-30'
) overall
where open_time between '2015-01-01'and'2015-01-30'
group by (case when vendor = 'NSN' then 'NOKIA' else upper(vendor) end)
评论:
- 子查询(在 MySQL 中)会产生用于实现中间结果的额外开销。
select
子句中的子查询为每一行调用一次。在from
中,只计算一次。
- 如果
id_incident
不为 NULL,则只需使用 count(*)
(或 count(1)
)。当您没有真正检查 NULL
值时,在 count()
中放置一列会产生误导。
我 运行 这个查询 MySQL。
Select Vendor, sum(Rate) as Rate
from (select case Vendor when 'NSN' then 'Nokia' else Vendor end as Vendor, Rate
from ( Select vendor ,(count(1) )*100/(Select count(id_incident)from incident where open_time between '2015-01-01'and'2015-01-30') as Rate from incident where open_time between '2015-01-01'and'2015-01-30'group by upper (vendor) )) as y group by vendor;
它给出了这个错误:
Error code 1248, SQL state 42000: Every derived table must have its own alias".
有什么问题?
您忘记为内部子查询指定别名。我选择了x
Select Vendor, sum(Rate) as Rate
from
(
select case Vendor when 'NSN' then 'Nokia' else Vendor end as Vendor, Rate
from
(
Select vendor ,(count(1) )*100/(Select count(id_incident)from incident where open_time between '2015-01-01'and'2015-01-30') as Rate
from incident
where open_time between '2015-01-01'and'2015-01-30'
group by upper (vendor)
) as x
) as y
group by vendor;
您的查询比需要的复杂得多:
Select (case when vendor = 'NSN' then 'NOKIA' else upper(vendor) end) as vendor,
count(*)*100 / overall.cnt as Rate
from incident i cross join
(Select count(*) as cnt
from incident
where open_time between '2015-01-01'and'2015-01-30'
) overall
where open_time between '2015-01-01'and'2015-01-30'
group by (case when vendor = 'NSN' then 'NOKIA' else upper(vendor) end)
评论:
- 子查询(在 MySQL 中)会产生用于实现中间结果的额外开销。
select
子句中的子查询为每一行调用一次。在from
中,只计算一次。- 如果
id_incident
不为 NULL,则只需使用count(*)
(或count(1)
)。当您没有真正检查NULL
值时,在count()
中放置一列会产生误导。