- ベストアンサー
SQLで月別・販売員別の集計ができない問題解決方法
- 月別、販売員別の集計ができない問題について、GROUP BY文の使い方と解決方法を解説します。
- GROUP BY文は複数の条件をつけることができませんが、複数の列を組み合わせて一意のキーを作成することで目的の集計が可能です。
- 具体的な例を挙げながら、GROUP BY文の使い方と目的の集計を行う方法を詳しく説明します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
select year(date) as Y, month(date) as M, name, sum(price) from SAMPLE_TABLE group by Y, M, name って感じ?
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
月ごとに集計するのが決まっているのであれば、できればそれ用のカラムを用意しておくと 集計の効率がたかくなり //集計用カラムを用意しない場合 create table tbl1 (id int not null primary key auto_increment,salesdate date, name varchar(20), price int,index(salesdate,name,price)); insert into tbl1 (salesdate,name,price) values( '2014-05-01','吉田',2400),( '2014-05-01','佐藤',1500),( '2014-05-02','佐藤',3000),( '2014-05-03','佐藤',10000),( '2014-05-04','佐藤',100),( '2014-06-18','佐藤',3000),( '2014-06-30','吉田',1000); //集計 select DATE_FORMAT(salesdate,'%Y%m') as ym,name ,sum(price) as amount from tbl1 group by ym,name; //集計用カラムを用意する場合 create table tbl2 (id int not null primary key auto_increment,salesdate date,ym varchar(6), name varchar(20), price int,index(ym,name,price)); insert into tbl2 (salesdate,name,price) values ( '2014-05-01','吉田','2400'),( '2014-05-01','佐藤','1500'),( '2014-05-02','佐藤','3000'),( '2014-05-03','佐藤','10000'),( '2014-05-04','佐藤','100'),( '2014-06-18','佐藤','3000'),( '2014-06-30','吉田','1000'); update tbl2 set ym=DATE_FORMAT(salesdate,'%Y%m'); //集計 select ym ,name ,sum(price) as amount from tbl2 group by ym,name; それぞれの集計SQLをEXPLAINすると効率の違いがわかると思います
補足
参照の頻度が高い場合、ymのカラムを作っておくということですね。ありがとうございます。
補足
ありがとうございます。commaで区切るんですね。テンポラリーテーブルを作らないといけないと思っていました。