• 締切済み

割合(パーセント)を求めるには?

COUNTによる集計と同時に、パーセンテージを求めたいのですが、どのようにSQLを書けばよいのでしょうか?(MySQL4.1) たとえば、 テーブル名:test、レコード数:100件、カラム数: 2 date product 2014-05-01 メガネ 2014-05-01 鉛筆 2014-05-02 メガネ 2014-05-03 メガネ 2014-05-05 鉛筆 ・・・ ・・ ・ 2014-06-30 鉛筆 ・ ・ という2014年5月1日~6月30日のデータを、 select DATE_FORMAT(date, '%Y-%m'), product, count(product) from test group by product, DATE_FORMAT(date, '%Y-%m'); とすると、以下のようにグループ(月、製品)毎に個数が表示されると思います。 2014-05 メガネ 30 2014-05 鉛筆 20 2014-06 メガネ 15 2014-06 鉛筆 35 それを次のように月別の割合(パーセント)を求めるにはどのようにSQLを書けばよいのでしょうか? 2014-05 メガネ 30 60% 2014-05 鉛筆 20 40% 2014-06 メガネ 15 30% 2014-06 鉛筆 35 70% 一見、インラインビューでできそうだったのですが、月別にする段階でできなくなりました。 (月別にせずデータ全体に対してならインラインビューでパーセンテージが求められると思います。)

みんなの回答

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

4.1ならサブクエリが使えるはず 理論の組み立て (1)商品、月別の件数を用意する。(現クエリ) (2)月別の全件数を用意する。 (3)上記の(1)と(2)を日付で結合する。 SELECT A.nengetsu,A.product,CONCAT(A.ken * 100 / B.zen,'%') hi FROM (SELECT DATE_FORMAT(date,'%Y-%m') AS nengetsu,product,COUNT(product) AS ken FROM test GROUP BY product,nengetsu) A INNER JOIN (SELECT DATE_FORMAT(date,'%Y-%m') AS nengetsu,COUNT(product) AS zen FROM test GROUP BY nengetsu) B ON A.nengetsu=B.nengetsu ORDER BY A.nengetsu,A.product

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

パーセント表示するかどうかは置いとくとして、こんな感じで? select ym,p,c,c/(select count(product) from test where DATE_FORMAT(date, '%Y-%m')=ym) as ratio from (select DATE_FORMAT(date, '%Y-%m') as ym, product as p, count(product) as c from test group by p, ym) as t1

関連するQ&A