我已经在这个工作了一个小时。我尝试了几种不同的连接和子查询,但都没有运气。这是情况。
两张桌子。一个带有主索引,一个是用户投票列表。我想确定一个特定用户为另一个用户留下了多少票(容易)......然后找出总票数的百分比并按此排序(困难)。
表 1 有列:post_id、poster_id 表 2 有列:post_id、voter_id、vote
post_id 在两个表之间是相关的。像这样的简单查询将为您提供一个输出,显示 1 个用户离开另一个用户的总票数......然后排序显示谁给另一个用户留下的票数最多。
SELECT poster_id, voter_id, count(*) AS votes
FROM table_1, table_2
WHERE table_1.post_id = table_2.post_id
GROUP BY poster_id, voter_id
ORDER BY votes DESC
效果很好......但我想看看谁留下的选票占用户总选票的百分比最多。所以我还需要获得“poster_id”的总票数,然后将当前数字除以百分比......然后按该百分比排序。输出应该是这样的:
poster_id | voter_id | votes | vote_total | percent
----------------------------------------------------
1 | 3 | 10 | 10 | 100%
3 | 1 | 15 | 25 | 60%
2 | 1 | 3 | 6 | 50%
2 | 3 | 2 | 6 | 33%
3 | 2 | 5 | 25 | 20%
2 | 4 | 1 | 6 | 17%
等等
基本上,选民#3 负责 100% 的海报#1 的选票。海报#3 60% 的选票来自选民#1……等等。
我们试图找出是否有特定用户给予某人比其他用户更多的选票(以百分比计),以试图找出潜在的滥用行为。
我认为 RIGHT JOIN 会起作用,但它不起作用。
SELECT t1.poster_id, t1.voter_id, count(*) AS votes, count(t3.*) AS votes_total, votes / votes_total AS percentage
FROM (table_1 t1, table_2 t2)
RIGHT JOIN (table_1 t3, table_2 t4)
ON (t3.post_id = t4.post_id AND t3.poster_id = t1.poster_id)
WHERE t1.post_id = t2.post_id
GROUP BY t1.poster_id, t2.voter_id
ORDER BY percentage DESC
基本上永远运行并且不返回任何东西。我从内存中输入了该查询,并不能完全代表真实的表名。任何朝着正确方向的点都会有所帮助。可能是内联?