MySQL查询按计算的失利百分比排序,找出球队克星
解决方案:按失利百分比排序找出克星球队
以下是修改后的SQL查询,可实现计算失利百分比并按该值排序的需求:
SELECT ce.ID AS opponent_id, ce.name AS opponent_name, SUM(CASE WHEN re.bg < re.og THEN 1 ELSE 0 END) AS defeats, COUNT(re.opponent) AS played, ROUND( CASE WHEN COUNT(re.opponent) = 0 THEN 0 ELSE (SUM(CASE WHEN re.bg < re.og THEN 1 ELSE 0 END) * 1.0 / COUNT(re.opponent)) * 100 END, 2 ) AS defeat_percentage FROM resultengine re RIGHT JOIN clubengine ce ON re.opponent = ce.ID WHERE re.ID < '767700' GROUP BY ce.ID, ce.name HAVING COUNT(re.opponent) > 0 ORDER BY defeat_percentage DESC, defeats DESC;
关键修改说明
- 修正分组逻辑:原查询分组时同时选择了
re.ID、re.bg等非聚合字段,这会导致结果异常(严格SQL模式下直接报错)。改为按球队ID和名称分组,确保分组的合理性。 - 精准计算百分比:
- 通过
*1.0将整数转换为浮点数,避免整数除法导致的精度丢失(比如8/16的整数除法结果为0,转浮点后才能得到正确的0.5)。 - 新增
CASE WHEN处理交手次数为0的场景,彻底避免除以0的错误。 - 用
ROUND函数将百分比保留两位小数,结果更直观易读。
- 通过
- 过滤无效记录:添加
HAVING played > 0,排除从未交过手的球队,只保留有对阵记录的对手数据。 - 优化排序规则:优先按失利百分比降序排列,百分比相同的情况下再按失利次数降序,精准定位最棘手的克星球队。
内容的提问来源于stack exchange,提问作者Pete Hayman
相关产品推荐
相关产品推荐

