Php mysql-未知列在';在/ALL/ANY子查询中';
我有一个名为“投票”的下表,其中存储了参与者的向上投票(1)和向下投票(-1)。我想获得前三名投票参与者ID及其总投票数,其中总投票数=向上投票-向下投票。我编写了如下所示的查询,但出现错误:“in/ALL/ANY子查询”中的未知列“total_voces” 预期结果将是 ------------------------------- |参与者id |总票数| +------+-------+--------+------+ | 2 | 3 | 5 | 2 | 1 | 1 | 3 | 1 +------+-------+--------+------+Php mysql-未知列在';在/ALL/ANY子查询中';,php,mysql,Php,Mysql,我有一个名为“投票”的下表,其中存储了参与者的向上投票(1)和向下投票(-1)。我想获得前三名投票参与者ID及其总投票数,其中总投票数=向上投票-向下投票。我编写了如下所示的查询,但出现错误:“in/ALL/ANY子查询”中的未知列“total_voces” 预期结果将是 ------------------------------- |参与者id |总票数| +------+-------+--------+------+ | 2 | 3 |
由于您的表中没有
total_vows
列,您需要执行以下操作:
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`
您可以使用join重新编写查询,以获取投票分数位于前三名投票中的前三名参与者,即前三名投票为(3,2,1)
检查此简单查询:
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;
@hardik如果参与者的分数与您的样本数据中的分数相同,则此查询将跳过id为3的参与者,尽管此参与者的投票分数也为top3s@MKhalidJunaid根据查询,他只需要前三名。@ZafarMalik查看他的问题和预期结果partright@khalid。。。你的答案很完美。。。我不想要前三名参与者的ID,而是前三名投票人,他们可能有相同的投票权……ok@hardik第二次查询将满足您的要求,我之前误解了您的要求。感谢khalid的反馈。这非常有效。。。只有我必须添加的是参与者ID的独特性。。。谢谢
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 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
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;