考虑类似于以下的查询:
SELECT sum(EXPR) as total,
sum(EXPR) as total2,
sum(total+total2) as grandtotal
FROM tablename
这会出现并在字段列表中显示未知列总数。
无论如何都要引用计算中的别名字段而不重新输入总和表达式,因为每一侧的sum(EXPR)
都很长。
答案 0 :(得分:23)
以下是在数据库引擎中执行操作的顺序。
请注意,这是一个关于如何执行事物的语义视图,数据库可能以不同的顺序执行操作,但它必须产生结果,就好像这样做。
有些数据库引擎允许你绕过这个,通过在SELECT-part中按第二列分组“GROUP BY 2”,但如果你坚持上面的顺序,你应该知道这个原因你的代码不起作用的是没有名称为total或total2(还)的列。
换句话说,你需要重复这两个表达式,或者找到另一种方法。
你可以做的是使用一个子查询(假设你是支持这个的MySQL版本):
SELECT total, total2, total+total2 as grandtotal
FROM (
SELECT sum(EXPR) as total, sum(EXPR) as total2
FROM tablename
) x
根据评论剔除其余部分。
我对MySQL知之甚少,所以你可能需要对子查询进行别名:
...
FROM tablename
) AS x
^-+^
|
+-- add this
某些数据库引擎在使用子查询别名时也不允许使用关键字AS,因此如果上述操作不起作用,请尝试以下操作:
...
FROM tablename
) x
^
|
+-- add this
击> <击> 撞击>
答案 1 :(得分:6)
SELECT total, total2, total + total2 as grandtotal from (
SELECT sum(EXPR) as total,
sum(EXPR) as total2,
FROM tablename
) x
答案 2 :(得分:5)
SELECT @total1 := sum(EXPR),
@total2 := sum(EXPR),
@total1 + @total2 as grandtotal
FROM tablename
答案 3 :(得分:0)
SELECT
WITH Sums AS
(
SELECT sum(EXPR) as total,
sum(EXPR) as total2
FROM tablename
)
SELECT SUM(sums);
为你的tsql粉丝...
答案 4 :(得分:0)