[英]Division by zero in SQL statement how to avoid specific record if it returns division by zero
我試圖發表一個聲明,讓球員進球得分,然后按比賽進行划分。 如果玩家已經玩了 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;
但我的問題是多條記錄。
您可以使用大多數流行的 DBMS 中存在的簡短nullif
函數:
select
...,
ROUND(GamesPlayed/nullif(GoalsScored, 0) ,2) as GoalsPerGame
...
SQL 有 CASE 語句,它只在找到匹配項之前執行。
CASE WHEN COALESCE(GamesPlayed,0) = 0 THEN 0
ELSE ROUND(GoalsScored/GamesPlayed,2)
END AS GoalsPerGame
每場比賽的目標也將是目標/游戲。
嘗試 SQL 聯合:
SELECT PlayerName, PlayerSurname, GamesPlayed, GoalsScored,
ROUND(GamesPlayed/GoalsScored ,2) AS GoalsPerGame
FROM tblPlayers , tblStatistics
WHERE tblPlayers.PlayerID = tblStatistics.PlayerID
AND GoalsScored <> 0
UNION
SELECT PlayerName, PlayerSurname, GamesPlayed, GoalsScored, 0
FROM tblPlayers , tblStatistics
WHERE tblPlayers.PlayerID = tblStatistics.PlayerID
AND GoalsScored = 0
ORDER BY GoalsScored DESC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.