简体   繁体   English

除法结果为零时返回字符串

[英]Return string when division result is zero

I have an SQL query like this: 我有这样的SQL查询:

SELECT 
u.id,
tu.score/(CASE tu.mo_count  WHEN 0 THEN NULL ELSE tu.mo_count END) AS score_avg
FROM tournament_userscore tu
INNER JOIN users u ON u.id = tu.user_id
WHERE tournament_id = 1
ORDER BY tu.score DESC

When tu.mo_count is zero, Null has been replaced instead of zero. tu.mo_count为零时,将替换为Null而不是零。 How can I set a string like 'EMPTY' for this line: 如何为该行设置类似'EMPTY'的字符串:

tu.score/(CASE tu.mo_count  WHEN 0 THEN NULL ELSE tu.mo_count END) AS score_avg

I mean when division result is zero or empty , I want to return " anything " string. 我的意思是当除法结果为零或为空时 ,我想返回“ 任何 ”字符串。

You could use NULLIF and COALESCE if you don't want to use a CASE: 如果不想使用CASE,则可以使用NULLIF和COALESCE:

SELECT 
  u.id,
  COALESCE(tu.score/NULLIF(tu.mo_count, 0), 0) AS score_avg
FROM tournament_userscore tu
  INNER JOIN users u ON u.id = tu.user_id
WHERE 
  tournament_id = 1
ORDER BY 
  tu.score DESC;

Try moving the CASE -statement outside: 尝试将CASE语句移到外部:

SELECT 
u.id,
CASE WHEN tu.mo_count = 0 THEN 'EMPTY' ELSE (tu.score/tu.mo_count)::text END as score_avg
FROM tournament_userscore tu
INNER JOIN users u ON u.id = tu.user_id
WHERE tournament_id = 1
ORDER BY tu.score DESC

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM