簡體   English   中英

mysql-'IN / ALL / ANY子查詢'中的未知列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM