1

以前の注文を示すテーブルがあります。
購入した各アイテムは、テーブルの個別の行として追加されます。以下のダンプを参照してください。

私の目的は、月単位で注文あたりの平均ライン数を表示することです。ラインの平均量を取得するには、購入したアイテムの量を注文の量で割る必要があります。

私のクエリは現在、毎月の合計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');
4

1 に答える 1

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;
于 2013-03-21T11:25:00.427 に答える