2009-09-03 10 views
1

これは遅くなるか、またはMySQLのnoob(おそらくどちらも正直である)のためにこの方法をどうにかするのはわかりません。パーセント平均を取得する

私は「を備えるpoll_votes」と呼ばれるテーブルがあります。その回答の合計数のうちの割合を計算し、

ID, poll_id, answer_id, ip, time_posted 

私が行う必要がある何が、特定のpoll_id内の各ユニークanswer_idのためでありますanswer_idはをカウントします。私はここに、私は何をする必要があるか言葉遣いで本当に良いのクエリは、(単一の行)を返すべきかされないよ:

total -> total number of answers for this poll_id 
[0] -> the percentage of 'total' that this makes up eg. 32 (%) 
[1] -> the percentage of 'total' that this makes up eg. 16 (%) 
[2] -> the percentage of 'total' that this makes up eg. 52 (%) 

もちろん、一緒に追加されたすべてのパーセンテージは、百に等しくなければなりません。また、返されたパーセンテージごとのフィールド名は、必ずしもどの順序である必要はありません。

私は、クエリーがanswer_idの総数と投票数を返したとしても、PHPで簡単に計算できます。

誰でも私に指針を与えることができますか?

編集:これは私がこれまで持っているものですが、それは動作しません:

SELECT (SELECT COUNT(*) FROM poll_votes) AS total, answer_id, COUNT(answer_id)/total * 100 AS percentage GROUP BY answer_id 

答えて

1

簡単な解決策は

select answer_id, count(answer_id) as answercount 
from poll_votes 
group by answer_id 

なると、あらかじめ

select count(ID) from poll_votes 

を使用します総行数を取得する

+0

実際には2番目の選択を使用する必要はありません....ちょうど合計を取得する最初の選択から値を追加します。 – Amber

0

ないので、内側のSELECTの美しい答えが、(解答欄のために使用されるテキストの代わりに、int型)動作するはずです:

drop table if exists ANSWERS; 

create table ANSWERS (
    ID int not null auto_increment, 
    ANSWER text, 
    primary key (ID) 
); 

insert into ANSWERS (ANSWER) values ("Alpha"); 
insert into ANSWERS (ANSWER) values ("Beta"); 
insert into ANSWERS (ANSWER) values ("Gamma"); 
insert into ANSWERS (ANSWER) values ("Gamma"); 
insert into ANSWERS (ANSWER) values ("Delta"); 
insert into ANSWERS (ANSWER) values ("Delta"); 
insert into ANSWERS (ANSWER) values ("Delta"); 

select 
    ANSWER, 
    count(ANSWER)/(select count(*) from ANSWERS) * 100 AS PERCENTAGE 
from ANSWERS 
group by ANSWER 
order by PERCENTAGE; 

テストドライブを:もちろん

mysql -u root test < percentage-usage.sql 
ANSWER PERCENTAGE 
Alpha 14.2857 
Beta 14.2857 
Gamma 28.5714 
Delta 42.8571 
0

あなたがすることはできませんフィールドエイリアスを必要な場所のフィールド値として使用します(私はあなたの '合計' asliasについてです)。あなたは、あなたは、あなたが「純粋」persentsを取得するために、100秒の列を掛けすることができ、この

 
select answer_id, count(*)/(select count(*) from poll_votes where poll_id = pv.poll_id) 
from poll_votes pv 
where pv.poll_id = _your_specific_poll_id_ 
group by answer_id 

のようないくつかを使用する必要があります句

「でグループ」においてもエイリアスを使用することはできません。

関連する問題