사용중인 DB는 MYSql입니다.
정확한 쿼리부탁드려요 ㅜㅜ
데이터량이 많다보니..index설정도 생각해야할거같은데ㅜㅜ
1. member 테이블의 attributes
mem_num, mem_id, mem_residentno, mem_state
2. product 테이블의 attributes
prod_num,prod_name,prod_price
3. order_info 테이블의 attributes
ord_info_num,ord_mem_id,ord_product,ord_message
4. order_prod 테이블의 attributes
ord_num, ord_info_num, ord_prod_num
테이블과 각 attribute의 관계 :
member.mem_id = order_info.ord_mem_id
order_info.ord_info_num = order_prod.ord_info_num
order_prod.ord_prod_num = product.prod_num
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
select ord_prod_num,count(*) as cnt
from order_prod_list as opl
where opl.ord_info_num = any ( select ord_info_num
from order_info_list
where ord_mem_id = any ( select mem_id from member
where (year(now())-1900) - substring(mem_residentno,1,2) between 20 and 29
)
)
group by ord_prod_num;
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
위와 같이 쿼리를 날려보니 ...
member 테이블로부터 20인 사람들의 mem_id를 모두 가져와서 order_info_list(주문리스트)테이블에있는 ord_mem_id와같은
ord_info_num(주문번호)를 가져왔습니다.
그후에 다시 이 ord_info_num과 order_prod_list 테이블의 ord_info_num과 비교하여 같으면 ord_prod_num(제품번호)를 가져오되,
같은 제품에대해서는 group by를 통하여 그수를 가져왔습니다.
즉 제가 만든쿼리는 각 제품에 대해서 제품이름과 20대가 구입한 각제품의 수를 가져온것인데요...
하...너무 느리고...
또 10대 20대 30대 각각을 product 테이블에 조인해서 결과를 찾자니..기다리는 시간이 멘붕올만큼 길고...ㅜㅜ
현재 이상황인데요....
각 연령 별로 제품(상품)들에 대하여 통계를 구하려고합니다...
질의를 어떻게해야 결과가 나올까요...
일주일 내내 이것만 하고있는데...ㅜㅜ join, select 뭘 해봐도 안되서 질문올립니다.
만들어진 결과를 가지고 이렇게 다타내려고합니다...
제품명 | 10대 이하 | 20대 | 30대 | 40대 이상 |
제품 1 | --- | --- | --- | --- |
제품 2 | --- | --- | --- | --- |
제품 3 | --- | --- | --- | --- |
빠른 답면 부탁드려요 ㅜㅜ
Comment 1
-
건우아빠
2013.07.22 20:39
order_info 테이블 member 테이블 , order_prod 테이블 , product 테이블 네 테이블을 조인해서
제품명, 고객나이대 를 기져오는 쿼리를 민들어 보세여....
질문하신 내용에서 any로 처리된 부분에서 나이때를 계산해서 가져오기 때문에 인덱스가 걸리지 않을듯 합니다.
전체를 가져와서 나이때를 계산하는게 빠를듯 하네요...