質問: 株価の特定期間の平均値を求めようとしています。 `stockdata_all` は 連番と株価コード 株価 日にち が入っているテーブルです。 `aa1`,`code`, `owarine`, `date` 1000 5101-T 1800 2016-10-25 999 5108-T 3800 2016-10-25 998 5101-T 1830 2016-10-24 997 5108-T 3850 2016-10-24 996 5101-T 1838 2016-10-23 995 5108-T 3836 2016-10-23 : : : : : : : : : : : : 下記で5101-Tの株価の25日平均を取得できます。 SELECT (SELECT SUM(`AA25`.`owarine`)/25 FROM (SELECT `aa1`,`code`,`owarine`,`date` FROM `stockdata_all` WHERE `code`='5101-T' order by `aa1` DESC LIMIT 0,25) as AA25) as 25ave 表示は 25ave 1682 のような形で、コード表示はありません。 【やりたいこと】 code 25ave 5101-T 1682 5108-T 3150 のようにコードごとに25日平均の株価を表示させたいです。 SELECT `stockdata_all`.`code`,AC25.`code`,AC25.`AB25` FROM `stockdata_all` , (SELECT `code`,(SELECT SUM(`AA25`.`owarine`)/25 FROM (SELECT `aa1`,`code`,`owarine`,`date` FROM `stockdata_all` order by `aa1` DESC LIMIT 0,25) as AA25) AS AB25 FROM `stockdata_all` order by `aa1` DESC LIMIT 0,25)AS AC25 WHERE `stockdata_all`.`code`=AC25.`code` としたのですが、株価は特定の価格がすべて表示され、個別表示になりません。 どのようにすればいいかご教示戴けましたら幸いです。 よろしくお願いいたします。
回答: ちょっと難しく考えすぎな気がします。 SQLには**GROUP BY句**という集計に特化した構文があるので、 それを利用した方が簡単に書けます。 (GROUP BYの詳しい説明はこちらをどうぞ) 以下SQLの一例です。 ``` SELECT s.code , AVG(s.owarine) AS "集計期間内の平均終値" FROM stockdata_all s WHERE -- 例えばDATE('2016-10-01')を開始日、DATE('2016-10-25')終了日とすると、 -- その期間のデータが集計対象に絞れます s.date BETWEEN 集計開始日の値 AND 集計終了日の値 GROUP BY -- ここで何単位で束ねて集約するか指定します s.code ```