0

複数のテーブルを結合してドリルダウンし、サブスクライバーが複数の投票を持つ地域ごとに投票したサブスクライバーの数を取得するクエリに取り組んでいます。

私が立ち往生している問題は、購読者が複数回投票した場所の計算を計算するクエリを書き込もうとしていることです。

SELECT COUNT(*), regions.name, 
(SELECT COUNT(*) FROM votes 
LEFT JOIN profiles on votes.subscriber_id = profiles.subscriber_id 
LEFT JOIN countries on profiles.country_id = countries.id 
WHERE countries.region_id = regions.id GROUP BY votes.subscriber_id) as vote_count 
FROM subscribers
LEFT JOIN profiles on subscribers.id = profiles.subscriber_id
LEFT JOIN countries on profiles.country_id = countries.id
LEFT JOIN regions on countries.region_id = regions.id 
LEFT JOIN votes on subscribers.id = votes.subscriber_id
WHERE subscribers.created_at < '2011-04-22 00:00:00'
GROUP BY regions.id
HAVING vote_count > 1;

上記のクエリでは、次のエラーが表示されます。Subquery returns more than 1 row

何か案は?

4

4 に答える 4

1

セクション

SELECT COUNT(*) FROM votes 
LEFT JOIN profiles on votes.subscriber_id = profiles.subscriber_id 
LEFT JOIN countries on profiles.country_id = countries.id 
WHERE countries.region_id = regions.id GROUP BY votes.subscriber_id

複数の結果を返しています。問題を解決するはずの「GROUPBYvotes.subscriber_id」を削除してみてください

于 2011-05-11T20:17:17.847 に答える
0

HAVING vote_count > 1句をサブクエリに入れてみてください。また、サブクエリを単独で試して、何が生成されるかを確認してください。

于 2011-05-11T20:17:48.143 に答える
0

サブクエリの場合:

(SELECT COUNT(*) FROM votes 
LEFT JOIN profiles on votes.subscriber_id = profiles.subscriber_id 
LEFT JOIN countries on profiles.country_id = countries.id 
WHERE countries.region_id = regions.id GROUP BY votes.subscriber_id)

行のコレクションを値に入れようとしているため、複数の行を返すとエラーになりますvote_countHAVINGこれは、句を追加してクエリの結果が 1 行だけになるようにすることで解決できます。

于 2011-05-11T20:16:47.483 に答える
0

サブクエリをクエリの SELECT 部分に配置するため、返される値は 1 つだけです (結果セットは 2 次元であるため)。

内側のクエリの WHERE 句のどこかに外側のクエリとの一致を追加して、1 行だけが一致するようにする必要があります。

探している COUNT(*) は、regions.name と一致しますか? 内部クエリをそれに接続する必要があります。

于 2011-05-11T20:17:01.400 に答える