mysql - SQL SELECT 语句显示基于值 ("win"或 "loss"的赢/输数)

标签 mysql sql select

我正在使用的 Tenis 数据库包含作为匹配项的行。该行包含玩家名称和条件(赢或输)。我需要显示一个包含所有玩家的表格,显示玩家姓名、总游戏数、获胜次数、失败次数和获胜百分比。

我还没有弄清楚如何正确设置 SELECT 语句来执行我需要的操作。从哪里开始:

SELECT player, COUNT(player) FROM tenis_table GROUP BY player

按玩家分组显示每个唯一的玩家名称,COUNT(player) 给出玩过的游戏总数。但是,我如何正确地创建一个 SQL SELECT 语句,该语句还根据“赢”或“输”的条件为我提供一个列,其中包含赢、输和赢的百分比?

最佳答案

实际上,您应该只询问玩家、总游戏数和获胜次数。其他一切都应该在您的代码中完成,但这里是为了防止您绝对想偏离良好的设计:

SELECT player, 
  COUNT(*) AS TotalGames,
  SUM(CASE WHEN condition='win' THEN 1 ELSE 0 END) AS Wins,
  COUNT(*)-SUM(CASE WHEN condition='win' THEN 1 ELSE 0 END) AS Losses,
--  SUM(CASE WHEN condition='loss' THEN 1 ELSE 0 END) AS Losses,
  SUM(CASE WHEN condition='win' THEN 1 ELSE 0 END)*100/COUNT(*) AS WinPercentage
FROM tenis_table
GROUP BY player

此外,只有当 player 不为空时,COUNT(player) 才会为您提供组中记录的总数。我认为 COUNT(*) 稍微快一些,因为它不必检查每条记录的 player 是否为 null,所以我切换到那个。

关于mysql - SQL SELECT 语句显示基于值 ("win"或 "loss"的赢/输数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34638841/

相关文章:

mysql - 如何在SQL中获取具有该ID的其他列记录

MySQL:查询抛出列不存在错误

jquery - 使用 jquery 对多个选择下拉选项进行排序

php - 使用动态数量的 LIKE 条件构建 SELECT 查询作为 mysqli 准备语句

php - 使用 php 在 mysql 表中获取总记录数的最佳方法是什么?

MYSQL 透视/将行转换为值匹配的列

sql - "ORDER BY items must appear in the select list if SELECT DISTINCT is specified"

java - 从最后两行中选择数据sql

mysql - 优化 sql 查询以提高效率

sql - ActiveRecord 嵌套 SELECT——我可以在没有手动 SQL 的情况下完成吗?