2013-03-21 3 views
1

이전 주문을 표시하는 테이블이 있습니다.
구입 한 각 항목은 테이블에 별도의 행으로 추가됩니다 (아래 덤프 참조).MySQL 쿼리 - 매월 주문 당 평균 행수

나의 목표는 매월 주문 당 평균 라인 수를 보여주는 것입니다. 평균 금액을 얻으려면 구매 한 품목의 금액을 주문 수량으로 나눠야합니다.

내 쿼리는 현재 월간 합계를 제공하고 line_count은 구입 한 항목의 정확한 개수를 반환하지만 주문량을 반환 할 수는 없습니다 (아래 덤프에서 13을 제공해야 함). 여러 가지 하위 쿼리를 추가하려했지만이 문제를 해결하는 방법을 모르겠습니다. 어떤 아이디어? 여기

SELECT 
date, 
COUNT(orderno) AS line_count 
FROM `orders` 
AND 
date BETWEEN '2010-01-21' AND CURDATE() 
GROUP BY month(date), year(date) 
ORDER BY date 

은 ...

CREATE TABLE IF NOT EXISTS `orders` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
    `orderno` varchar(15) COLLATE utf8_unicode_ci NOT NULL, 
    `date` date NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=22904 ; 

-- 
-- Dumping data for table `orders` 
-- 

INSERT INTO `orders` (`id`, `orderno`, `date`) VALUES 
(1, 'rad10000', '2010-01-21'), 
(2, 'rad10000', '2010-01-21'), 
(3, 'rad10001', '2010-01-21'), 
(4, 'rad10001', '2010-01-21'), 
(5, 'rad10002', '2010-01-21'), 
(6, 'rad10003', '2010-01-21'), 
(8, 'rad10003', '2010-01-21'), 
(9, 'rad10003', '2010-01-21'), 
(10, 'rad10004', '2010-01-22'), 
(11, 'rad10004', '2010-01-22'), 
(12, 'rad10005', '2010-01-22'), 
(13, 'rad10005', '2010-01-22'), 
(14, 'rad10006', '2010-01-22'), 
(15, 'rad10007', '2010-01-22'), 
(16, 'rad10008', '2010-01-22'), 
(17, 'rad10009', '2010-01-22'), 
(18, 'rad10010', '2010-01-22'), 
(19, 'rad10011', '2010-01-22'), 
(20, 'rad10012', '2010-01-22'); 

답변

2

아, 내가 볼 (명확성을 위해 단순화) 테이블 스키마입니다

SELECT YEAR(date) 
     , MONTH(date) 
     , COUNT(*) line_count 
     , COUNT(DISTINCT orderno) orders_placed 
    FROM orders 
    WHERE date BETWEEN '2010-01-21' AND CURDATE() 
    GROUP 
    BY YEAR(date) 
     , MONTH(date) 
    ORDER 
    BY date;