質問: PHP MySQL Ver 5.0~ 製品評価をMySQLに保存しています。 テーブル内容は以下のような感じです: 製品番号|商品名前|評価1|評価2|評価3|コメント| 各評価は数字で行われ、0〜各評価毎の最高点 で行われます。 例えば 評価1の場合、最低は0で最高は3だとします。 一方、評価2の場合は、0〜9とします。 又、評価3の場合は、ちょっと異なり、0〜3なのですが、評価の仕方が 0:地域需要に対して良い 1:国内需要に対しては良い 2:国外需要に対しては良い 3:生産中止を考慮すべき で、3だけの場合もあれば、0-1 という評価もインサートされている場合があります。 この集計を出来るSQLを教えて下さい。 例えばレコードが10000件登録されているとして、 評価1の結果→0:23パーセント、1:27パーセント、2:60パーセント、3:0パーセント という結果を表示したいのです。 ちなみに負荷対策のため、JOINは使用できません。 よろしくお願いいたします。
回答: 実行環境がわからないので、同一セッション内であれば下記のように実行できます。 ``` SELECT count(*) INTO @totalNumber FROM 製品評価; SELECT 評価1, CONCAT( ROUND( COUNT(評価1) / @totalNumber * 100, 2 ), '%' ) As '割合' FROM 製品評価 GROUP BY 評価1 ORDER BY 評価1; SELECT 評価2, CONCAT( ROUND( COUNT(評価2) / @totalNumber * 100, 2 ), '%' ) As '割合' FROM 製品評価 GROUP BY 評価2 ORDER BY 評価2; SELECT 評価3, CONCAT( ROUND( COUNT(評価3) / @totalNumber * 100, 2 ), '%' ) As '割合' FROM 製品評価 GROUP BY 評価3 ORDER BY 評価3; ``` SELECT 文ごとに結果を出力するので、ファイルに出力するか、一つずつ順番に実行ください。 うまくいかない場合はご使用のDBのバージョンと、クエリをどのような環境で実行しているかをコメントください。