加入表格之间的投票并获得百分比

时间:2013-01-05 19:37:05

标签: mysql join

我在这个工作了一个小时。我尝试了几个不同的连接,子查询没有运气。情况就是这样。

两张桌子。一个具有主索引,一个具有来自用户的投票列表。我想确定一个特定用户为另一个用户留下的票数(简单)......然后确定总投票的百分比并按其分类(硬)。

表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获得了选民#1等60%的选票。

我们试图找出某个特定用户是否比其他用户更多地投票(按百分比)来尝试查找潜在的滥用行为。

我认为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 

基本上永远运行,不会返回任何东西。我从内存中键入了该查询,并不完全代表真实的表名。正确方向上的任何点都会有所帮助。内联也许?

1 个答案:

答案 0 :(得分:1)

试试这个:

SELECT
    poster_id,
    voter_id,
    count(*) AS votes,
    count(*) * 100 / total.total_votes as percentage
FROM table_1
join (
    select poster_id, count(*) AS total_votes
    FROM table_1
    join table_2 on table_1.post_id = table_2.post_id
    GROUP BY poster_id
) total on total.poster_id = table_1.poster_id
join table_2 on table_1.post_id = table_2.post_id
GROUP BY poster_id, voter_id
ORDER BY votes DESC

这使用子查询返回每个poster_id的总投票数,然后加入它,就好像它是一个表。

还要注意使用正确连接而不是通过where子句连接的更改。