首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Oracle的Talend中计算带连接的行数

如何在Oracle的Talend中计算带连接的行数
EN

Stack Overflow用户
提问于 2016-08-30 01:52:58
回答 1查看 97关注 0票数 0

我有三张桌子

代码语言:javascript
复制
supplier(id_supp, name, adress, ...)

Customer(id_cust, name, adress, ...)

Order(id_order, ref_cust, ref_supp, date_order...)

我想做一个工作,计算由Supplier的订单数量,为last_week,last_two_weeks与Talend

代码语言:javascript
复制
select 
supp.name,
(
   select 
       count(*)
   from 
       order
   where
       date_order between sysdate-7 and sysdate
       nd ref_supp=id_supp
) as week_1,
(
   select 
       count(*)
   from 
       order
   where
       date_order between sysdate-14 and sysdate-7
       nd ref_supp=id_supp
) as week_2
from supplier supp

我这样做的原因是我的查询花了很多时间

EN

回答 1

Stack Overflow用户

发布于 2016-08-30 02:11:54

您需要在supplierorder之间进行连接才能获得供应商名称。我显示了一个内部联接,但是如果您需要所有的供应商(即使是那些在order表中没有订单的供应商),您可以将它更改为一个左外部联接。

除此之外,您应该只需读取order表一次,即可获得所需的所有信息。您的查询不只执行一次(读取查询的解释计划),这可能是耗时过长的原因。

注意:sysdate有一个time-of-day组件(也许date_order值也有);您编写查询的方式可能会执行,也可能不会执行。您可能需要使用trunc()包围sysdate

代码语言:javascript
复制
select s.name,
       count(case when o.date_order between sysdate -  7 and sysdate     then 1 end) 
                                                                                as week_1,
       count(case when o.date_order between sysdate - 14 and sysdate - 7 then 1 end) 
                                                                                as week_2
from   supplier s inner join order o
       on s.id_supp = o.ref_supp
;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39212251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档