我必须设置一个对比模块,用户可以在其中为配置文件 A 或 B 投票。每条记录将存储 3 个重要值:投票的人、获胜的人、失败的人。
用户
- id_user
- 姓名
用户与
- id_与-主键
- id_user - 投票的人
- id_user_winner - 显然是获胜者
- id_user_loser - 失败者
我可以通过单独执行这些查询来计算用户的百分比:
- $wins = 'SELECT COUNT(*) FROM user_versus WHERE id_user_winner = 6';
- $loses = 'SELECT COUNT(*) FROM user_versus WHERE id_user_loser = 6';
- $总计 = $获胜 + $损失;
所以%胜利 = $胜利/$总计
不过,我相信该查询可以优化为一个查询,然后将其用作报告查询的子查询(这是我真正需要帮助的查询)。报告需要返回:
获胜百分比大于指定用户的获胜百分比的用户列表
我不知道从现在开始如何继续。任何提示都会有所帮助。谢谢!
最佳答案
对于一个用户:
SELECT ifnull(wins, 0) wins, ifnull(loses,0) loses,
ifnull(wins, 0)+ifnull(loses,0) total,
ifnull(wins, 0) / ( ifnull(wins, 0)+ifnull(loses,0)) percent
FROM (
SELECT
(SELECT COUNT(*) FROM user_versus WHERE id_user_winner = 6 ) wins,
(SELECT COUNT(*) FROM user_versus WHERE id_user_loser = 6 ) loses
) subqry
对于所有用户:
SELECT id_user_winner AS id_user,
ifnull(wins, 0) wins
ifnull(loses,0) loses
ifnull(wins, 0)+ifnull(loses,0) total,
ifnull(wins, 0) / ( ifnull(wins, 0)+ifnull(loses,0)) percent
FROM (
SELECT id_user_winner AS id_user FROM user_versus
UNION
SELECT id_user_loser FROM user_versus
) u
LEFT JOIN
FROM (
SELECT id_user_winner, count(*) wins
FROM user_versus
GROUP BY id_user_winner
) w
ON u.id_user = id_user_winner
LEFT JOIN (
SELECT id_user_loser, count(*) loses
FROM user_versus
GROUP BY id_user_loser
) l
ON u.id_user = l.id_user_loser
关于php - SQL 获取至少赢得特定百分比次数的获胜者列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19645073/