2013-01-05 36 views
1

我一直在这个工作了一个小时。我尝试了几个不同的连接,并且没有运气的子查询。这是情况。加入表格之间的投票并获得百分比

两张表。一个主索引,一个来自用户的投票列表。我想确定一个特定用户为另一个用户离开了多少票(容易)...然后计算出总票数的百分比和排序(难)。

表1具有列:POST_ID,poster_id 表2具有列:POST_ID,voter_id,投票

的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是负责海报#1的选票100%。海报#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

试试这个:

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子句连接的更改。

+0

完美的作品!希望我记得我可以做一个加入选择。非常感谢。 –