MySql SELECT query


MySql SELECT query

我正在编写一个脚本,该脚本根据从MySQL表获得的值计算杀死比(KDR)。我正在修复别人的代码。我已经设法让大部分工作再次工作。但是,我被困在这里了。KDR 的计算方法是将所有击杀数相加,然后除以玩家的死亡人数。但是,如果玩家从未死亡,那么 KDR 以 0 出现。我需要一种方法来读取 0,在评估 KDR 时为 1。我确实用谷歌搜索了这个,并试图编写一个我可以使用的UDF,但唉,它没有帮助。

下面是有问题的 SQL 查询

function get_leaders($civ, $neu, $riv){
    $sSQL = "SELECT *, ((civilian_kills * _civ + neutral_kills * _neu + rival_kills * _riv) / deaths ) as KDR
              from sc_players
              order by KDR DESC
              LIMIT 100;";

http://dev.mysql.com/doc/refman/5.5/en/control-flow-functions.html#function_if

SELECT *,
IF(deaths,civilian_kills * $civ + neutral_kills * $neu + rival_kills * $riv) / deaths,1) as KDR
from sc_players
order by KDR DESC
LIMIT 100
我认为

你的意思是除数在 1 时应该被视为 0。在这种情况下,你会做

SELECT *, ((civilian_kills * $civ + neutral_kills * $neu + rival_kills * $riv) / 
    (IF deaths = 0 THEN 1 ELSE deaths)
) as KDR from sc_players order by KDR DESC LIMIT 100;

假设死亡是非阴性的,你也可以做:

SELECT *, ((civilian_kills * $civ + neutral_kills * $neu + rival_kills * $riv) / 
    GREATEST(deaths, 1)
) as KDR from sc_players order by KDR DESC LIMIT 100;