거래, 주문 및 쿠폰과 같은 "많은 관계"가있는 MySQL 세 개의 테이블 세트가 있습니다.Mysql은 왼쪽 조인과 카운트를 교환합니다.
Deals
|----|--------------|
| id | title |
|----|--------------|
| 1 | Some deal |
| 2 | Another deal |
|----|--------------|
Orders
|----|---------|-----------|
| id | deal_id | state |
|----|---------|-----------|
| 1 | 1 | purchased |
| 2 | 1 | purchased |
| 3 | 1 | expired |
| 4 | 2 | purchased |
|----|---------|-----------|
Coupons
|----|----------|
| id | order_id |
|----|----------|
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 2 |
| 6 | 4 |
|----|----------|
그래서 거래에는 많은 쿠폰이있는 많은 주문이 있습니다.
내가 원하는 것은 거래 테이블을 선택하고 구매 한 주문 및 쿠폰 수를 계산하는 것입니다.
은 이미 지불 한 주문에 수를 얻는 방법을 알고
SELECT orders.*, count(coupons.id) AS coupons_count FROM orders
LEFT JOIN coupons ON orders.id=couoons.orders_id
WHERE orders.state='purchased'
GROUP BY orders.id
Orders
|----|-----------|---------------|
| id | state | coupons_count |
|----|-----------|---------------|
| 1 | purchased | 3 |
| 2 | purchased | 2 |
| 4 | purchased | 1 |
|----|-----------|---------------|
내 질문은 : 어떻게 할
SELECT deals.*, count(orders.id) AS orders_purchased_count FROM deals
LEFT JOIN orders ON deals.id=orders.deal_id AND orders.state='purchased'
WHERE deal_id < 3
GROUP BY deals.id
Deals
|----|--------------|------------------------|
| id | title | orders_purchased_count |
|----|--------------|------------------------|
| 1 | Some deal | 2 |
| 2 | Another deal | 1 |
|----|--------------|------------------------|
마찬가지로, 내가 주문 쿠폰의 수를 얻을 수 있습니다 쿠폰을 합하면 orders_purchased_count 옆에 coupons_count를 추가 할 수 있습니까?
Deals
|----|--------------|------------------------|---------------|
| id | title | orders_purchased_count | coupons_count |
|----|--------------|------------------------|---------------|
| 1 | Some deal | 2 | 5 |
| 2 | Another deal | 1 | 1 |
|----|--------------|------------------------|---------------|
까다로운 것은, 내 경우에는, 내가 orders
에 가입하고 내가 coupons
에 가입하기 전에 orders
에서 선택할 때 WHERE orders.state='purchased'
필터를 실행하기 전에 deals
에서 선택할 때 WHERE deal_id < 3
필터를 실행하는 것입니다. 대용량 데이터 세트이므로 합치기 위해 내 orders
및 coupons
을 모두 메모리에로드하고 싶지 않습니다.
어떻게해야합니까?
sqlfiddle이 있습니까? – Strawberry