2013-02-03 4 views
2

세 개의 테이블이 있습니다. 내 목표는 간단하다이 케이스를 어떻게 쿼리합니까?

Category(id, name); 
Item(id, name, category); 
SoldItem(id, item, qty); 

, 나는 모든 종류의 카테고리를 더한 항목 수를 더한 행으로 그 특정 카테고리의 상품 판매 항목의 수를 나열합니다.

결과는 다음과 같다 :

Category | Item count | Item sold count 
---------------------------------------- 
Food  | 2   | 50 
---------------------------------------- 
Beverage | 3   | 60 

가 어떻게 PostgreSQL을이를 조회 않습니다. 미리 감사드립니다.

+0

죄송합니다. 추가하지 않았습니다. – William

답변

3

열쇠는 달리 여러 손자가 여러 번 너무 계산되는 동일한 특허 초래, 중간 테이블에 합류 행을 계산하면 count(distinct)을 사용하는 것입니다 : 카테고리 항목없이,

select 
    c.name as category, 
    count(distinct i.id) as item_count, 
    sum(si.qty) as item_sold_count 
from Category c 
left join Item i on i.category = c.id 
left join SoldItem si on si.item = i.id 
group by c.name; 

left 조인을 사용하여, 판매 항목은 여전히 ​​표시되지만 총계는 0으로 표시됩니다.

+0

Count (i.id)는 특정 항목과 관련된 SoldItem의 행 수에 영향을 받기 때문에 실제 수를 표시하지 않습니다. – William

+0

@ 윌리암스 - 나는 별개의 것을 버렸습니다. 이제 해결되었습니다. 감사. – Bohemian

+0

감사합니다. 당신은 항상 도움이됩니다. – William

관련 문제