2017-07-24 68 views
1

我目前正在尝试计算每个郊区的交付时间晚于一个月的要求以及他们迟到的平均时间。ORA-00904:“TOTAL_ORDERS”:无效标识符

我已经完成了这个目前为止没有参数查询用户输入他们希望看到的月份。

SELECT s.suburbname, 
     Count(*) AS total_orders , 
     ("ORDER".ACTUALTIMEDELIVERED - "ORDER".CUSTREQTIME)/total_orders AS latetime 
FROM "ORDER" 
left join restaurant r 
     ON "ORDER".restaurantid = r.restaurantid 
left join suburb s 
     ON r.suburbid = s.suburbid 
     WHERE "ORDER".deliveredflag = 'X' 
     AND "ORDER".ACTUALTIMEDELIVERED > "ORDER".CUSTREQTIME 
GROUP BY s.suburbname 
ORDER BY total_orders, latetime; 

但是它给我一个ORA-00904:“TOTAL_ORDERS”:无效的标识符。

这是我的群体条款吗?

更新1我已经设法解决了,谢谢大家!但是现在我有一个不同的问题。我似乎无法总结INTERVAL DAY TO SECOND数据类型,因为它会抛出错误:ORA-00932:不一致的数据类型:预计NUMBER将INTERVAL DAY移动到第二位。

有没有总结所有的时间差异和平均出来?

更新2

我已经成功使用EXTRACT函数来提取出来的小时和分钟,并总结所有的人一起反对数来解决我的所有问题。

SELECT 

s.suburbname, 
     Count(*) AS total_orders, 

SUM(60*(Extract(hour from "ORDER".ACTUALTIMEDELIVERED) - Extract(hour from "ORDER".Custreqtime)) + Extract(minute from "ORDER".ACTUALTIMEDELIVERED) - Extract(minute from "ORDER".Custreqtime))as amt 


FROM "ORDER" 
     left join restaurant r 
       ON "ORDER".restaurantid = r.restaurantid 
     left join suburb s 
       ON r.suburbid = s.suburbid 
WHERE 
"ORDER".deliveredflag = 'X' 
AND 
"ORDER".ACTUALTIMEDELIVERED > "ORDER".CUSTREQTIME 
GROUP BY s.suburbname 
ORDER BY s.suburbname desc; 
+0

如果你有一个新的问题,你应该工作一点,自己找到答案,然后问一个新的问题。这不是它的工作原理。您没有自己的帖子来获得对Oracle语法的支持!你去买书,先学习。 –

+0

对不起。我已经设法解决了更新中突出显示的问题。将解决方案发布给其他人。它可以帮助他们 – ABB25

回答

2

您不能重新使用total_orders在计算你可以:

SELECT s.suburbname, Count(*) total_orders , 
("ORDER".ACTUALTIMEDELIVERED - "ORDER".CUSTREQTIME)/count(*) latetime  
FROM "ORDER" 
left join restaurant r 
... 

希望它可以帮助

+0

'AS'是列别名的合法语法(但不是表别名)。 – APC

+0

@APC,谢谢,我又坏了。但是'select_orders'可以在select中的计算语法中使用吗? –

2

的问题是在这条线("ORDER".ACTUALTIMEDELIVERED - "ORDER".CUSTREQTIME)/total_orders AS latetime

Total_order只是在行之前定义的列别名。而第二个隐藏的例外是ORA-00979: not a GROUP BY expression.

可能您应该在此查询中使用分析功能。但我不知道业务需求。

select s.suburbname 
     , count(*) over(partition by s.suburbname) as total_orders 

     , ("ORDER".ACTUALTIMEDELIVERED - "ORDER".CUSTREQTIME)/count(*) over(partition by s.suburbname) as latetime 
    from "ORDER" 
     left join restaurant r on "ORDER".restaurantid = r.restaurantid 
     left join suburb s on r.suburbid = s.suburbid 
    where "ORDER".deliveredflag = 'X' and "ORDER".ACTUALTIMEDELIVERED > "ORDER".CUSTREQTIME 
order by total_orders, latetime; 
+0

感谢您的回答!我已经解决了这个问题,但现在难以在我的问题中添加区间数据类型值 – ABB25