基于两个计算列的计算列

时间:2009-05-20 19:14:57

标签: mysql subquery calculated-columns

我正在尝试进行一个相当复杂的SELECT计算,我将概括:

  1. 主查询是表格的通配符选择
  2. 一个子查询根据条件执行所有项目的COUNT()(此工作正常)
  3. 另一个子查询根据另一个条件在列中执行SUM()个数字。这也可以正常工作,除非没有记录满足条件,它返回NULL
  4. 我最初想要添加两个子查询,类似于(subquery1)+(subquery2) AS total,除非subquery2为null,否则{Q = 1}}会变为空,无论subquery1的结果是什么。我的第二个想法是尝试创建第三列,即计算两个子查询(即total),但我认为不可能计算两个计算列,即使它是,我觉得同样的问题也适用。

    除了获取两个子查询值并在我的程序中累计它们之外,有没有人有这个问题的优雅解决方案?

    谢谢!

4 个答案:

答案 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是否支持它。