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
...


以上是SQL语句中被零除如何避免特定记录如果它返回被零除的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>