• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:月別、販売員別の集計がわかりません。mySqlです)

SQLで月別・販売員別の集計ができない問題解決方法

このQ&Aのポイント
  • 月別、販売員別の集計ができない問題について、GROUP BY文の使い方と解決方法を解説します。
  • GROUP BY文は複数の条件をつけることができませんが、複数の列を組み合わせて一意のキーを作成することで目的の集計が可能です。
  • 具体的な例を挙げながら、GROUP BY文の使い方と目的の集計を行う方法を詳しく説明します。

質問者が選んだベストアンサー

  • ベストアンサー
  • kawais070
  • ベストアンサー率52% (2242/4282)
回答No.1

select year(date) as Y, month(date) as M, name, sum(price) from SAMPLE_TABLE group by Y, M, name って感じ?

kensuzuki100
質問者

補足

ありがとうございます。commaで区切るんですね。テンポラリーテーブルを作らないといけないと思っていました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答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すると効率の違いがわかると思います

kensuzuki100
質問者

補足

参照の頻度が高い場合、ymのカラムを作っておくということですね。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • MYSQLで月ごとの集計をおこないたい

    こんばんは。MYSQLのTABLE_Aに下記の3つのフィールドがあります。 日時(DATE),商品名(VARCHAR),売上(INT) 2010/01/01,商品A,100 2010/01/30,商品B,200 2010/03/10,商品C,300 2010/03/20,商品D,400 最終的に欲しいのは、1月は1月の集計(300)、3月は3月の集計(700)など、月でまとめたいと思っています。 groupでまとめるにも日付まではいっているので、月でまとめるにはどうしたらいいのか悩んでいます。よろしくお願いします。利用MYSQLは5.5です。

    • ベストアンサー
    • MySQL
  • 売り上げ集計SQLが作れません

    1つのTABLEに、1日の売上げ高を商品ごとに登録していくDBがあります。 簡単な構造は以下のとおりです。 日付       |A品売上額  |B品売上額 | 2008/11/01 |500000    |600000   | 2008/11/02 |450000    |800000   | 2008/11/03 |100000    |700000   | ・・・ 2008/11/30 |200000    |500000   | 2008/12/01 |300000    |100000   | <質問> それぞれの商品の1ヶ月売上高をSQLで抽出したいと思うのですが、Group byで何を指定したらいけるのかわからず困っています。 SQLで計算せずに抽出だけ行って、CGI側で計算するしかないのでしょうか? アドバイスお願いいたします。 <最初に考えたSQL(Group byがないためエラーになりました)> select sum(a),sum(b) from uriage where date between '2008/11/01' AND '2008/11/30';

  • 日付毎の集計方法

    下記のようなテーブル構成で、過去一週間の毎日について、登録した人の数を知りたいです。 ■テーブル名 my_table システムに登録すると,IDが付与され,登録した日付が記録されます。 ---------------------------------------- id(intger) | reg_date(登録した日付,timestamp) ---------------------------------------- 以下のようなSQLを考えたのですが、timestampが「2005-12-01 00:00:00+09」という細かい日付になっているので、これでは「1日」毎の集計にはなりません。 この場合、どう表現すればよいでしょうか? SELECT sum(reg_date) from my_table where ('now' - reg_date < '7days') GROUP BY reg_date order by reg_date

  • MySQL 可変テーブルの集計方法

    今現在、PHP MySQLにてDB&簡単なCMSを作成中です。 仕入テーブル(id, date_y, date_m, id_cost, price, etc...)と勘定項目テーブル(id_cost, name_cost)をid_costをキーにして連結し、月々の勘定項目ごとの集計画面を作成したいのです。 SELECT 仕入テーブル.date_y, 仕入テーブル.date_m, 仕入テーブル.id_direct_cost, 勘定項目テーブル.name_cost, SUM(仕入テーブル.price) AS sumcost FROM 仕入テーブル NATURAL JOIN 勘定項目テーブル WHERE 仕入テーブル.date_y="'.$y.'" AND 仕入テーブル.date_m="'.$m.'" AND 仕入テーブル.typecost="direct" AND 仕入テーブル.id_direct_cost=勘定項目テーブル.id_cost ※$y, $mは集計画面で選択された年月です。 とすると、月々の合計が抽出され、勘定項目ごとの集計ができません。 当方、半年くらい学校にてPHP MySQLを習ったのですが、まだまだ未熟者のため解決できません。 お力をお貸しいただけますと大変ありがたく存じます。 どうぞよろしくお願い致します。

    • ベストアンサー
    • MySQL
  • Accessで期間指定の売上合計と順位指定のクエリ

    Accessのクエリの質問です。 (1)期間を指定した、顧客の売上を合計。 (2)その順位を出し、1位~100位や250位などの順位を指定した抽出をしたいです。 (1)期間指定の売上合計はできています。 (2)の順位をDCountでしましたが、金額(集計:合計)にしているためか構文エラーがでます。 よろしくお願い致します。 ------------------------------------------------ 2つのテーブルから、Q_売上(クエリ)を作成しました。 tbl顧客 顧客番号 顧客名 tbl販売 販売番号 日付 顧客番号 金額 Q_売上 日付(集計:Where条件) 顧客番号(集計:グループ化) 顧客名(集計:グループ化) 金額(集計:合計) 日付の抽出条件は、 Between [開始] And [終了] としています。 ------------------------------------------------

  • SQL 集計について

    集計方法がどうしてもわからないのでご教授ください。 下記のテーブルを持っています。 テーブル1では日々の売上金額を管理し、 テーブル2では一週間の日付が保存されています。(月曜日~日曜日) -------テーブル1-------           日付    売上金額   2013/09/01     3000   2013/09/02     4000   2013/09/03     2000    ・              ・           ・           2013/09/30     1000 ----------------------- --------テーブル2---------  日付(月)    日付(日)    2013/08/26   2013/09/01 2013/09/02   2013/09/08    ・        ・    ・       2013/09/30   2013/10/06 ------------------------- テーブル1とテーブル2の情報をもとに テーブル3にある、日付(月)と日付(日)は、テーブル2から持ってきて、 一週間の集計を行いたいと思っております。 --------------テーブル3--------------  日付(月)    日付(日)    売上金額 2013/08/26  2013/09/01     3000 2013/09/02  2013/09/08     6000   ・   ・   ・ 2013/09/30  2013/10/06     1000 ------------------------------------ このようにするにはどのようなSQLを組めばいいのでしょうか? SQL初心者のため、難しい単語などを使わずに ご説明をしていただければと思います。 どうぞ、よろしくお願いいたします。

  • MySQL4でViewの代わりにできますか?

    PostgreSQLで下記のようなビューを作成し、そのビューから日付でgroupbyして日付ごとのユニーク件数を取っていました。 ---------------------------------------------- create view v_uniqcountday as select substring(datetime, 1, 8) as date, uniqid, careercd, count(*) as cnt from accesslog group by date, uniqid, careercd order by date; select date, count(*) as cnt from v_uniqcountday where (date >= xxx) and (date < xxx) group by date; ---------------------------------------------- しかし、MySQLではViewは作成できないようです。 そこでselect文のみで上記のような集計は可能でしょうか? よろしくお願いいたします。

  • 月間集計ですべての日付を抽出するには

    Oracle9iで開発をしております。 月間集計をするにあたり、SQLをどのように書けばよいのか質問させていただきたいと思います。 たとえば、COUNTテーブルというテーブルがあり 年月日 カウント数 2005/09/01 1000 2005/09/01 1000 2005/09/02 2000 2005/09/03 3000 2005/09/05 5000 2005/09/06 6000 というようにデータが入っていたとします。 現在、 SELECT 年月日, SUM(カウント数) FROM COUNTテーブル WHERE COUNT_DATE BETWEEN TO_DATE(to_char(?||'/'||?||'/01')) AND LAST_DAY(TO_DATE(to_char(?||'/'||?||'/01'))) GROUP BY 年月日 としていまして、抽出されるデータは 2005/09/01 2000 2005/09/02 2000 2005/09/03 3000 2005/09/05 5000 2005/09/06 6000 となります。 ここで、2004/09/04や2005/09/07以降2005/09/30までのテーブルには存在 しない日付も抽出したいと思っています。 どのようにすれば抽出できるのでしょうか?

  • 曜日別に集計したいのですが。

    当方、飲食店の総務経理を担当しているものですが、日別の時間ごとの売上データを曜日別に集計して1~31日の月曜日を集計したら幾ら売れたかっていうのを関数で出来ないか?と思いまして。データとしては縦に1日~31日の日付を置き、その横に曜日をふって横に7時~23時と時間を置いており、時間ごとに販売額を細分化した表になっております。それを曜日別に置き換えたいんですが、どなたかご教授願えないでしょうか?

  • ピボットテーブルの集計結果を使って、さらに条件を付けて集計をしたいです

    ピボットテーブルの集計結果を使って、さらに条件を付けて集計をしたいです。 たとえば、このようなピボットテーブルから、 [A]      [B]       [C]       [D]                         1月 Group  Account1   Account2 G0    田中         東京     5         加藤         大阪     2 G1     佐藤        大阪      3 G1    田中         名古屋       A列のGroupをキーにして、D列を集計します。 G0の合計は7で個数は2、G1の合計は3で個数は1、という結果を出すにはどのようにしたら良いでしょうか?