如何使用一个计算列来创建另一个计算列

5

我有一个在Sqlite中涉及复杂列计算的查询,假设如下:

SELECT 1+1 AS a;

我希望把这个计算选为a,但我也需要将它作为另一个计算的组成部分:

SELECT 1+1 AS a, a+2 AS b;

不幸的是,这会产生错误:

Error: no such column: a

我知道我可以再次对b进行计算:
SELECT 1+1 AS a, 1+1+2 AS b;

但是,假设1+1是一项复杂且昂贵的操作,有没有办法在后面的SELECT中引用它而不必重新计算它?


可能是重复的问题,参考如何在同一视图中使用计算列计算另一列 - Liam
3个回答

3
你需要使用子查询。
SELECT c.d AS a, c.d + 2 AS b
FROM
  (SELECT 1+1 AS d) c

结果

| a | b |
---------
| 2 | 4 |

@ twoleggedhorse 谢谢,我错过了那部分。 - Kermit
1
@njk:不错,但是表和列使用相同的别名?哎呀。 - ypercubeᵀᴹ
表名在哪里指定的? - Mercurial
@Mercurial 表名是指哪个? - Kermit

0

看看你能否像这样做(使用子查询来处理表)

Select t.a+2 as b
    FROM (Select 1+1 as a from xyz) t 

OP希望也能返回a - Kermit

0
除了其他人提供的所有好例子之外 - 这在Oracle中也适用:
SELECT a, a+2 b From
(
 SELECT 1+1 a From dual
)
/

Output:

A | B
-----
2 | 4

谢谢。不幸的是,Sqlite不支持“dual”。 - dgel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接