php - SQL 获取至少赢得特定百分比次数的获胜者列表

标签 php mysql sql percentage

我必须设置一个对比模块,用户可以在其中为配置文件 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/

相关文章:

c# - C# 和 PHP 之间的对称加密

php - Jquery 标记处理程序

php - laravel 5.7.15 419 抱歉,您的 session 已过期。请刷新并重试

mysql - 插入 1.6 大于/小于

python - 无法使用 sqlalchemy 在 postgresql 上将字符串转换为时间戳。我已经尝试了所有可能的方法,但似乎没有任何效果

MySQL 删除不存在的表

c# - Entity Framework 5 - 0..1 到多关系无法保存新实体

java - UcanAccess 中的 DELETE 函数抛出奇怪的异常

phpsessid - 是否值得将 session 名称更改为散列的和特定于访问者的名称

mysql - SQL:获取哪一天下载的最大文件数