根据两个计算的列计算的列
-
23-08-2019 - |
题
我想做一个相当复杂的 SELECT
我将推广的计算:
- 主要查询是一张桌子的通配符选择
- 一个子查询做一个
COUNT()
在所有基于条件的项目中(这很好) - 另一个子查询
SUM()
基于另一个条件的列中的数字。这也可以正常工作,除非没有记录符合条件,否则它将返回NULL
.
我最初想加总两个子征服 (subquery1)+(subquery2) AS total
除非subquery2为null,在这种情况下,哪个工作正常 total
不管subquery1的结果是什么。我的第二个想法是尝试创建第三列,该列是对两个子征服的计算(即, (subquery1) AS count1, (subquery2) AS count2, count1+count2 AS total
)但是我认为无法计算两个计算的列,即使是,我也觉得同样的问题也适用。
在获得两个子查询价值并将其总计在我的程序中的情况下,有没有人能解决此问题的优雅解决方案?
谢谢!
解决方案
这里有两个问题:
您不能在同一选择列表中的另一个表达式中使用一个列别名。
但是,您可以在派生的表子查询中建立别名,并将其在外部查询中使用。
你不能用null做算术,因为 空不是零.
但是,您可以使用该null将null“默认”为非null值
COALESCE()
功能。此函数返回其第一个非编号参数。
这是一个例子:
SELECT *, count1+count2 AS total
FROM (SELECT *, COALESCE((subquery1), 0) AS count1,
COALESCE((subquery2), 0) AS count2
FROM ... ) t;
(请记住,在此示例中必须给出一个派生的表格别名,“ t”)
其他提示
首先,结合功能应帮助您解决任何无效问题。
您能否使用联盟将这两个查询合并为单个结果集,然后将其视为进一步分析的子查询?
也许我不完全理解您的问题?
我会尝试(对于第二个查询)类似:select sum(isnull(mycolumn,0))//请在使用之前验证语法,但是...
对于该列的任何实例为零,这应该返回0而不是null。
可能没有必要说,但是由于您在程序中使用它,因此您宁愿使用程序逻辑来总和两个结果(null和一个数字),这是由于便携性问题。
谁知道何时拒绝结合功能或其他DBMS是否支持它。