从现有列中计算一个“虚拟”列

6

在 SQL/SQLite3 中,是否可以执行一个 select 语句,其中的列并不存在,但是该列是由其他列的计算结果得出的?

例如,假设有一个包含 max 和 current 列的表格,我希望对两者之间的差异执行 select 操作,如下所示:

table_data:
max|current
10|3
12|8

select ???? from table_data order by ????? asc;

desired result:
4
7

这里是SQLite3语法,可以参考http://www.sqlite.org/lang_expr.html,但是可能不太容易理解。


我想问如何将这样的虚拟列附加到SELECT *。哇,SELECT *,'1' as "im"可以工作! - Val
2个回答

6
select `max` - `current` as `result` from table_data order by `result` asc

感谢您。我可能会使用OMG Ponies更简洁的语法,但是我可以通过复制粘贴尝试这个。 - hanlonj

2
如果这不只是一次性的事情,你最好有一个全景视图。
create view yourtable_diffs as 
select max, current, max - current as diff from yourtable;

那么,你只需要
 select diff from yourtable_diffs order by diff;

你可以看一下来自FirstSQL J的SQL教程

这看起来不错。所以你的yourtable_diffs会持久存在,并且值会自动计算?好处是什么,查询更清晰?如果我想从yourtable_diffs和table_data的组合中选择列,该怎么办? - hanlonj
1
是的,视图是持久的。计算是自动完成的。好处在于计算只需编写一次,经过开发人员的验证正确无误,并且可供所有需要它的人使用。这比每次需要时重新编写计算更可靠。(这里的好处不多,因为计算非常简单,但计算可以任意复杂,涉及许多表。)您可以同时从表和视图中选择列。请参见我上面的编辑。 - Mike Sherrill 'Cat Recall'

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