2014-12-12 2 views
-1

두 테이블에서 합계 가입 :하나는 내가 두 테이블 주문 및 행 ordersdetail 가진 수백만 ..</p> <p>테이블이

주문 - ID (기본 키), 금액, 날짜 (인덱스)

orderdeails - 아이디 (기본 키) skunitid, 수량 ORDER_ID (색인)

한 순서가 다차 세부

,174 ...

검색어 :

Select Sum(orders.amount),SUM(ordersdetails.quantity) 
from orders join orderdetails on ordersdetail.order_id = orders.id 
where {{conditios on date column of order table}} 

가 나는 그것의 잘못된 쿼리를 KNW, 나는 하나의 쿼리에서 금액과 수량의 합 (단일 반복)의 데이터 합을 원하지만 조인을 사용하면 주문의 테이블 양이 너무 많은 시간을 온다. 나는 주문 테이블의 날짜 열 인덱스를 가지고, 그래서 내가 주문 테이블에서 쿼리를 시작하는 데 필요한 (테이블의 백만 행을.)

내가 효율적인 방법이 필요합니다 ..

+0

"친애하는 일기, 내가 가진 두 테이블 주문 ... "스택 오버플로 질문에 대한 올바른 형식이 아닙니다. 어떤 코드가 작동하지 않습니까? – tadman

+0

주문에서 sum (orders.amount), SUM (ordersdetails.quantity)를 선택하면 ordersdetail.order_id = orders.id의 orderdetails에 조인됩니다. {{conditios}} –

+0

일대 다 많은 현실성 때문에 금액이 잘못 합산됩니다. –

답변

0
Select 
    Sum(Order.Amount), 
    Sum(OrderTotals.OrderQuantity) 
From 
    Order 
Inner join 
( 
    Select 
     OrderDetails.OrderID, 
     Sum(OrderDetails.Quantity) as OrderQuantity 
    From 
     OrderDetails 
    Where 
     OrderDetails.OrderID in 
     (Select OrderID From Order where Order.Date between @x and @y) 

    Group by 
     OrderDetails.OrderID 
) As OrderTotals 
On 
    OrderTotals.OrderID = Order.OrderID 

Where 
    Order.Date between @x and @y 
+0

좋은 해결책이 아닙니다. 처음에 완전한 orderdetail 테이블 반복 .. 불량한 성능 ... –

+0

하위 쿼리에 동일한 조건을 추가하기 만하면됩니다. – Aheho

+0

내 대답을 편집했습니다. – Aheho