2010-04-19 4 views
3

나는 재고 테이블을 가지고 있으며, 얼마나 자주 주문했는지 보여주는 보고서를 만들고 싶습니다.두 개의 SQL 쿼리를 결합하는 방법은 무엇입니까?

"재고"표 :

item_id | pcs | operation 
apples | 100 | order 
oranges | 50 | order 
apples | -100 | delivery 
pears | 100 | order 
oranges | -40 | delivery 
apples | 50 | order 
apples | 50 | delivery 

는 기본적으로 나는이 두 가지 쿼리에 가입해야합니다. 재고 잔고를 인쇄

쿼리 :

SELECT stock.item_id, Sum(stock.pcs) AS stock_balance 
FROM stock 
GROUP BY stock.item_id; 

판매 통계를 인쇄하는 쿼리

SELECT stock.item_id, Sum(stock.pcs) AS pcs_ordered, Count(stock.item_id) AS number_of_orders 
FROM stock 
GROUP BY stock.item_id, stock.operation 
HAVING stock.operation="order"; 

가입하고 난 어떤 종류의 일을 할 것이라고 생각하지만 어떻게 접착제하는 아무 생각이 없다 검색어 함께.

원하는 출력 :

item_id | stock_balance | pcs_ordered | number_of_orders 
apples |    0 |   150 |    2 
oranges |   10 |   50 |    1 
pears |   100 |   100 |    1 

이는 단지 예이다. 어쩌면 더 많은 열이 있기 때문에 더 많은 조건을 추가해야 할 것입니다. 여러 쿼리를 결합하는 보편적 인 기술이 있습니까?

답변

2
SELECT a.item_id, a.stock_balance, b.pcs_ordered, b.number_of_orders 
FROM 
    (SELECT stock.item_id, Sum(stock.pcs) AS stock_balance 
    FROM stock 
    GROUP BY stock.item_id) a 
LEFT OUTER JOIN 
    (SELECT stock.item_id, Sum(stock.pcs) AS pcs_ordered, 
      Count(stock.item_id) AS number_of_orders 
    FROM stock 
    WHERE stock.operation = "order" 
    GROUP BY stock.item_id) b 
ON a.item_id = b.item_id 
+0

매우 감사해야한다. 바로 그것이 내가 필요로하는 것이며 마침내 2 개의 SELECT를 JOIN과 결합하는 방법을 마침내 알게되었습니다. – Plasmuska

1

이것은

SELECT 
    stock.item_id, 
    Sum(stock.pcs) AS stock_balance, 
    pcs_ordered, 
    number_of_orders 
FROM stock LEFT OUTER JOIN (
    SELECT stock.item_id, 
    SUM(stock.pcs) AS pcs_ordered, 
    COUNT(stock.item_id) AS number_of_orders 
    FROM stock 
    WHERE stock.operation ='order' 
    GROUP BY stock.item_id 
    ) s2 ON stock.item_id = s2.item_id 
GROUP BY 
    stock.item_id, 
    pcs_ordered, 
    number_of_orders 
+0

고마워요, 이것도 작동합니다. 결국 약간의 실수가 있습니다. 마지막 줄은 number_of_orders 여야합니다. – Plasmuska

+0

@plasmuska, 참으로. 나는 끝에있는 이름을 바꾸고 이것을 잊어 버렸다. 이것을 반영하기 위해 나의 답을 수정했다. –

관련 문제