【问题标题】:Joining votes between tables and getting a percentage加入表格之间的投票并获得百分比
【发布时间】:2013-01-05 19:37:04
【问题描述】:

我已经在这个地方工作了一个小时。我尝试了几种不同的连接和子查询,但都没有运气。情况如下。

两张桌子。一个带有主索引,一个是用户投票列表。我想确定一个特定用户为另一个用户留下多少票(简单)...然后计算总票数的百分比并按此排序(困难)。

表 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 

基本上永远运行并且不返回任何东西。我从内存中输入了该查询,并不完全代表真实的表名。任何朝着正确方向的点都会有所帮助。可能是内连接?

【问题讨论】:

    标签: mysql join


    【解决方案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 子句连接的变化。

    【讨论】:

    • 完美运行!希望我记得我可以选择加入。非常感谢。
    猜你喜欢
    • 2022-08-10
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多