2009-06-13 6 views
3

밤늦게 나에게 잘 모르겠다는 간단한 MySQL 쿼리 질문이 있습니다. 나는 일련의 데이터 (명령) 집합의 인스턴스 수를 세는 SELECT를 시도하고 그 순서를 부모보다 몇 단계 상위에 존재하는 값으로 그룹화한다. 예를 들어MySQL 다단계 부모 선택/가입 질문

:

SELECT COUNT (orders.id), 주문, 범주 WHERE 수주 카테고리 ID : 내가 뭘 찾고있어

CREATE TABLE `so_test`.`categories` (
    `id` int(10) unsigned NOT NULL auto_increment, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=572395 DEFAULT CHARSET=latin1; 

CREATE TABLE `so_test`.`product_group` (
    `id` int(10) unsigned NOT NULL auto_increment, 
    `category_id` int(10) unsigned NOT NULL auto_increment, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=572395 DEFAULT CHARSET=latin1; 

CREATE TABLE `so_test`.`products` (
    `id` int(10) unsigned NOT NULL auto_increment, 
    `product_group_id` int(10) unsigned NOT NULL auto_increment, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=572395 DEFAULT CHARSET=latin1; 

CREATE TABLE `so_test`.`orders` (
    `id` int(10) unsigned NOT NULL auto_increment, 
    `product_id` int(10) unsigned NOT NULL auto_increment, 
    `customer_id` int(10) unsigned NOT NULL auto_increment, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=572395 DEFAULT CHARSET=latin1; 

는 동네에서 무언가이다. customer_id in (1,2,3) GROUP BY orders.productId.productGroupId.categoryId

카테고리 1에 제품 17 개, 카테고리 2에 제품 2 개, 카테고리 3에 214 개가 있다고 가정하면, t 내가 돌아올 것을 희망하고있어입니다 :

count(orders.id), categoryId 
============================ 
     17    1 
     2    2 
     214    3 

는 내가 두 레벨 업 부분이 저를 던지고있다 fine..but 것 PRODUCT_ID 말하여 그룹려고합니다.

감사합니다. , 순서없이 카테고리를 들어

select categoryid, count(orders.id) 
from category c 
left join product_group pg on pg.category_id = c.id 
left join products on p on p.product_group_id = pg.id 
left join orders o on o.product_id = p.id 

카운트 (orders.id) 카운트 (*) productgroups의 수에 따라 하나 이상의를 반환하면서, 0을 반환하고 :

답변

4

그냥 그들을 함께 가입 제작품.

내부 조인은 주문이없는 카테고리는 계산하지 않습니다.

+0

참으로 - 감사합니다! – DarkSquid