我正在尝试进行一个相当复杂的SELECT
计算,我将概括:
COUNT()
(此工作正常)SUM()
个数字。这也可以正常工作,除非没有记录满足条件,它返回NULL
。 我最初想要添加两个子查询,类似于(subquery1)+(subquery2) AS total
,除非subquery2为null,否则{Q = 1}}会变为空,无论subquery1的结果是什么。我的第二个想法是尝试创建第三列,即计算两个子查询(即total
),但我认为不可能计算两个计算列,即使它是,我觉得同样的问题也适用。
除了获取两个子查询值并在我的程序中累计它们之外,有没有人有这个问题的优雅解决方案?
谢谢!
答案 0 :(得分:11)
这里有两个问题:
您不能在同一SELECT列表中的另一个表达式中使用一个列别名。
但是,您可以在派生表子查询中建立别名,并在外部查询中使用它们。
你不能用NULL做算术,因为 NULL不是零。
但是,您可以使用COALESCE()
函数将NULL“默认”为非NULL值。此函数返回其第一个非NULL参数。
以下是一个例子:
SELECT *, count1+count2 AS total
FROM (SELECT *, COALESCE((subquery1), 0) AS count1,
COALESCE((subquery2), 0) AS count2
FROM ... ) t;
(请记住,必须为派生表提供表别名,在此示例中为“t”)
答案 1 :(得分:3)
首先,COALESCE函数可以帮助您处理任何null问题。
您是否可以使用联合将这两个查询合并为一个结果集,然后将其视为子查询以进行进一步分析?
或许我没有完全理解你的问题?
答案 2 :(得分:1)
我会尝试(对于第二个查询)类似于:SELECT SUM(ISNULL(myColumn,0))//请在使用它之前验证语法,但是......
对于该列的任何实例为零,这应返回0而不是null。
答案 3 :(得分:0)
可能没有必要说,但由于你在程序中使用它,因为可移植性问题,你宁愿使用程序逻辑来对两个结果(NULL和数字)求和。
谁知道何时弃用COALESCE功能或其他DBMS是否支持它。