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は使用できません。

よろしくお願いいたします。

回答の条件
  • 1人5回まで
  • 登録:2009/03/02 14:24:37
  • 終了:2009/03/09 14:25:02

回答(4件)

id:tail_furry No.1

敷守ほむら回答回数74ベストアンサー獲得回数72009/03/02 16:00:33

ポイント27pt

PHPとMySQLとの組み合わせなら、件数だけMySQLで出して、パーセントの計算はPHPに任せた方がいいのではないでしょうか?

つまり、例えば評価1だけについてそれぞれのパーセントを表示するなら、

(製品番号がかぶらないという前提で)

1)

select 評価1, count(製品番号) as 件数 from 製品評価テーブル group by 評価1 order by 評価1

というSQL文を発行して、PHP側の配列に格納

2)

件数のフィールドを全て足すと全体の件数が判るから、

できた配列について、評価1ごとの件数を全体の件数で割ってパーセントを計算

id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332009/03/02 17:12:41

ポイント27pt

「評価*」のデータ型は文字列で、'0' や '0-1' が入るという前提ですよね。

また、'0-1' の場合は、'0' と '1' の両方でカウントする(つまり、パーセント数の合計は100以上になることがある)という前提で良いですか。


であれば、評価1の結果が0である件数の割合(パーセント)を計算する SQL 文は以下の2行です。

select @cnt:=count(*) from テーブル;
select (count(*) / @cnt * 100) from テーブル where 評価1 like '%0%';

1である場合を計算するには、2行目の末尾を "where 評価1 like '%1%'"

2である場合を計算するには、2行目の末尾を "where 評価1 like '%2%'"

‥‥

以下、同様です。

id:Mook No.3

Mook回答回数1312ベストアンサー獲得回数3912009/03/02 19:39:01

ポイント26pt

実行環境がわからないので、同一セッション内であれば下記のように実行できます。

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のバージョンと、クエリをどのような環境で実行しているかをコメントください。

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 りゅう 30 25 2 2009-03-04 00:04:56

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません