SQL语句中被零除如何避免特定记录如果它返回被零除
我试图发表一个声明,让球员进球得分,然后按比赛进行划分。如果玩家已经玩了 0 场比赛,就会出现 0 分局。我如何“跳过”或忽略这一点并为每场比赛的目标显示 N/A?这是我目前拥有的:
SELECT PlayerName, PlayerSurname, GamesPlayed, GoalsScored, ROUND(GoalsScored/GamesPlayed ,2) AS GoalsPerGame
FROM tblPlayers , tblStatistics
WHERE tblPlayers.PlayerID = tblStatistics.PlayerID
ORDER BY GoalsScored DESC
我在 delphi 10.3 中这样做,所以表的连接是在 where 语句中完成的,但这不会影响一般问题。如果我为一张唱片做这件事,我会做的
if tblStatistics['GamesPlayed'] = 0 then
begin
qryStatsStatic.SQL.Clear;
qryStatsStatic.SQL.Add('
SELECT PlayerName, PlayerSurname, GamesPlayed, GoalsScored, "N/A" AS GoalsPerGame
FROM tblPlayers , tblStatistics
WHERE tblPlayers.PlayerID = tblStatistics.PlayerID
ORDER BY GoalsScored DESC');
qryStatistics.open;
end;
但我的问题是多条记录。
回答
您可以使用nullif大多数流行的 DBMS 中存在的简短函数:
select
...,
ROUND(GamesPlayed/nullif(GoalsScored, 0) ,2) as GoalsPerGame
...