
店舗の毎日の売り上げを、日付・販売員名・売り上げ額のテーブルで集計しています。
【テーブル例1】
date, name, price
2014-05-01,吉田,2400
2014-05-01,佐藤,1500
2014-05-02,佐藤,3000
...(中略)...
2014-06-18,佐藤,3000
2014-06-30,吉田,1000
これを月別、販売員別の金額で次のように集計したいのですが、
【例2】
各販売員がその月に売り上げた金額の合計
2014-5 吉田 205000
2014-5 佐藤 120000
2014-6 吉田 75000
2014-6 佐藤 90000
SELECT文における"GROUP BY"の条件を、"GROUP BY date AND name"のように"AND"でつなげてもうまくいきませんでした。
もちろん、条件をひとつだけにした"GROUP BY date" および "GROUP BY name"では、それぞれ日付別の集計、あるいは販売員名別の集計が出ます。
【質問】
1.GROUP BYは複数の条件をつけることができないのでしょうか?
2.どのようにすれば【例2】の集計ができますか?
No.1ベストアンサー
- 回答日時:
select year(date) as Y, month(date) as M, name, sum(price)
from SAMPLE_TABLE
group by Y, M, name
って感じ?
No.2
- 回答日時:
月ごとに集計するのが決まっているのであれば、できればそれ用のカラムを用意しておくと
集計の効率がたかくなり
//集計用カラムを用意しない場合
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すると効率の違いがわかると思います
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Update文の書き方について
-
OracleのSQL*PLUSで、デー...
-
決定性有限オートマトン
-
最新の日付とその金額をクエリ...
-
SELECTの結果で同一行を複数回...
-
エクセル関数 文字(ハイフン...
-
複数テーブルのMAX値の行データ...
-
Recordset.FindFirstについて
-
実績累計の求め方と意味を教え...
-
HTMLファイルから、特定の部分...
-
GROUP BYを行った後に結合した...
-
GROUP BYを使ったSELECT文の総...
-
<SQL>条件付きで最小値レコード...
-
商品テーブルからカテゴリ別の...
-
JSPのNULLレコード表示について...
-
日付データの抽出方法を教えて...
-
VBAの質問(続きです。)
-
平成20年 春期 基本情報技術者 ...
-
空白文字とスペースの検索
-
キーが同じを複数行を1行にま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
使うべきでない文字。
-
【初歩】ラジオボタンをつかっ...
-
SQL文で右から1文字だけ削除す...
-
【MYSQL】asでリネームしてwher...
-
sum()の出力結果順に並び替えを...
-
MySQLで MAX()とGROUP BYを使う...
-
チェックボックスの項目をDBにi...
-
割合(パーセント)を求めるに...
-
SQLの集計で「全て」の合計も表...
-
表示幅を短くしたい
-
ビット演算
-
検索機能で条件を指定しない場...
-
月別、販売員別の集計がわかり...
-
Update文の書き方について
-
UNIONについて
-
[初心者]A表の2つの値からB表...
-
MySQLのクエリについて
-
今週の日曜日から土曜日までの...
-
初心者Mysqlの関数のsubstring...
-
カウント結果を1レコードの中...
おすすめ情報