![](/img/trans.png)
[英]PHP MySQL - Column 'id' in IN/ALL/ANY subquery is ambiguous
[英]mysql - Unknown column in 'IN/ALL/ANY subquery'
我有一個名為“ votes”的表,參與者的upvote(1)和downvote(-1)存儲在其中。 我想獲得投票最多的3個參與者ID及其總投票,其中總投票=贊成-反對。 我寫了如下查詢,但出現錯誤:“'IN / ALL / ANY子查詢'中的未知列'total_votes'”
table 'votes' --------------------------------- | participant_id | vote| voter_id +------+-------+---------+------+ | 1 | 1 | 1 | 2 | 1 | 1 | 3 | 1 | 1 | 4 | -1 | 1 | 5 | 1 | 1 | 1 | -1 | 2 | 2 | 1 | 2 | 3 | 1 | 2 | 4 | 1 | 2 | 5 | 1 | 2 | 1 | 1 | 3 | 2 | 1 | 3 | 3 | -1 | 3 | 4 | -1 | 3 +------+-------+---------+-----+
SELECT `participant_id`, SUM( `vote` ) AS total_votes FROM `votes`
WHERE total_votes IN
(SELECT total_votes FROM
(SELECT DISTINCT (SUM( vote )) AS total_votes FROM `votes` GROUP BY `participant_id`
ORDER BY `total_votes` DESC LIMIT 0 , 3) AS temp )
GROUP BY `participant_id`
Expected result would be ------------------------------- | participant_id | total_votes +------+-------+--------+------+ | 2 | 3 | 5 | 2 | 1 | 1 | 3 | 1 +------+-------+--------+------+
您可以使用join來重寫查詢,以獲取其投票分數位於前3個投票中的前幾個參與者,即前3個投票是(3,2,1)
SELECT t.* FROM
(SELECT `participant_id`, SUM( `vote` ) AS total_votes
FROM `votes`
GROUP BY `participant_id`
) t
JOIN (SELECT SUM( `vote` ) AS total_votes FROM `votes`
GROUP BY `participant_id`
ORDER BY `total_votes` DESC LIMIT 0 , 3 ) t1
USING(total_votes)
ORDER BY t.total_votes DESC
您要執行的操作如下,因為表中沒有total_votes
列:
SELECT `participant_id`, SUM( `vote` ) AS total_votes FROM `votes`
WHERE votes IN
(SELECT total_votes FROM
(SELECT DISTINCT (SUM( vote )) AS total_votes FROM `votes` GROUP BY `participant_id`
ORDER BY `total_votes` DESC LIMIT 0 , 3) AS temp )
GROUP BY `participant_id`
檢查以下簡單查詢:
SELECT
participant_id, total_votes
FROM
(SELECT participant_id,SUM(vote) total_votes
FROM votes
GROUP BY participant_id) a
ORDER BY total_votes DESC
LIMIT 3;
要獲得前三名投票的所有參與者,可以使用以下查詢:
SELECT
a.participant_id, b.total_votes
FROM
(SELECT participant_id, SUM(vote) total_votes
FROM votes
GROUP BY participant_id) a
JOIN
(SELECT participant_id,SUM(vote) total_votes
FROM votes
GROUP BY participant_id
ORDER BY total_votes DESC LIMIT 3) b
ON a.total_votes=b.total_votes
ORDER BY total_votes DESC;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.