更多的概念性问题。我有一个查询,该查询计算一些值的总和并对照模板值X对其进行检查,例如:
SELECT
SUM(...),
X,
SUM(...) - X AS delta
FROM
...
现在查询本身可以正常工作。问题是,如果delta
变量不为零,则只需要显示一些结果,这意味着计算出的总和与模板X之间存在差异。如果delta
为零,则需要它什么也不显示。
这可以在SQL中实现吗?如果是,我该怎么办?
答案 0 :(得分:2)
您有一个汇总查询。许多(如果不是大多数的话)数据库在having
子句中支持列别名:
select . . .
from . . .
group by . . .
having delta <> 0;
对于那些不这样做的人,重复表达可能是最简单的:
having sum( . . . ) <> X
您还可以将查询放入CTE或子查询中,然后在子查询上使用where
。
答案 1 :(得分:1)
Oracle在HAVING
子句中不支持列别名。因此在oracle中,您必须必须在HAVING
子句中重复聚合。
看到这个:
SQL> SELECT MAX(COL1) AS RES,
2 COL2
3 FROM (select 1 as col1, 1 as col2 from dual
4 union all
5 select 10 as col1, 2 as col2 from dual)
6 GROUP BY COL2
7 HAVING RES > 5;
HAVING RES > 5
*
ERROR at line 7:
ORA-00904: "RES": invalid identifier
SQL> SELECT MAX(COL1) AS RES,
2 COL2
3 FROM (select 1 as col1, 1 as col2 from dual
4 union all
5 select 10 as col1, 2 as col2 from dual)
6 GROUP BY COL2
7 HAVING MAX(COL1) > 5;
RES COL2
---------- ----------
10 2
SQL>