私は違うアプローチを試みましたが、私の構文は大丈夫だと思ってもクエリは機能しません。MySQLの投票からの回答総数を数えて
私はかなり複雑な投票システムを持っています。一般的にポーリングにすべての答えは、「キー」欄には、特定の質問のID(「どのくらいの頻度でコーヒーを飲みます」のようにキーが「コーヒー」になります)、のようなものである一つのテーブル
CREATE TABLE `polls` (
`poll_id` int(10) NOT NULL auto_increment,
`client_id` int(10) NOT NULL,
`key` varchar(20) NOT NULL,
`val` varchar(30) NOT NULL,
PRIMARY KEY (`poll_id`)
);
にパットされます値は質問によって異なります。時には0または1、場合によっては0〜6、時には文字列です。 統計的な目的のために、すべての質問に対するすべての回答の割合を表示したいと考えています。私はそのため、このクエリを使用します。
SELECT p.`key`, p.val, COUNT(p.poll_id) AS people,
(SELECT COUNT(client_id) FROM clients) AS total
FROM polls AS p GROUP BY p.`key`, p.val ORDER BY p.`key`, p.val
このクエリ内の問題は、私はユーザーの合計数を取得するために、クライアントテーブルに依存していることである - すべてのユーザーがすべての質問に答えたときに働きました。今度は投票にもう1つの質問を追加しました。どのユーザーがその質問に答えたのではなく、すべてのユーザーが回答したように割合がカウントされるため、クエリはどのように機能するのでしょうか。
私は、この(私はさまざまな方法を試してみましたが、のは、それに来たとしましょう)のようなものにクエリを変更してみました:
SELECT p.`key`, p.val, COUNT(p.poll_id) AS people,
(SELECT COUNT(p2.poll_id) FROM polls AS p2 WHERE p2.`key` = p.`key`) AS total
FROM polls AS p GROUP BY p.`key`, p.val ORDER BY p.`key`, p.val
私はそれを見る方法を - それは、メインクエリからすべての値を取得する必要があります、グループそれ、その後は、サブクエリを実行する - ので、私のようなものになるだろう:
coffee , 0 , 10 , 30
coffee , 1 , 15 , 30
coffee , 2 , 5 , 30
tea , 0 , 5 , 25
tea , 1 , 5 , 25
tea , 3 , 5 , 25
tea , 4 , 10 , 25
最後の列は同じキーを持つすべての行をカウントし、コーヒーのために(valの列を無視するだろうが - > 10 + 15 + 5 = 30、紅茶 - > 5 + 5 + 5 + 10 = 25)。クエリは実行されません。それは実行されて実行されて実行され、最終的に私はそれをキャンセルする必要があります。私は "p2。key
= p。key
"サブクエリの一部に問題があると感じます。なぜなら、 "p2。key
= 'coffee'"と書くと、クエリはチャームのように実行されるからです。
それは私が欲しいものではありません - 私は、同じキー値を持つ行の数を取得したい - このような何か: 'SELECT COUNT(poll_id)ポーリンググループからkey' BYトリックは、私はそれを取得したいされ1つのクエリで、「元の」クエリから既に取得したデータを使用します。 –