一起添加 MySQL 别名字段
Posted
技术标签:
【中文标题】一起添加 MySQL 别名字段【英文标题】:Adding MySQL alias fields together 【发布时间】:2010-07-30 16:50:17 【问题描述】:考虑类似以下的查询:
SELECT sum(EXPR) as total,
sum(EXPR) as total2,
sum(total+total2) as grandtotal
FROM tablename
这出现并表示字段列表中的未知列总数。
有没有办法在计算中引用别名字段而不重新输入总和表达式,因为每一边的sum(EXPR)
都很长。
【问题讨论】:
我有机会检查我的答案,发现我错了。因此,我将其删除。感谢您指出我的错误。 【参考方案1】:这是在数据库引擎中执行事物的顺序。
请注意,这是事物如何执行的语义视图,数据库可能会以不同的顺序执行操作,但它必须产生结果,就好像它是以这种方式完成的一样。
-
首先评估 FROM 部分,我从哪里获取数据
然后评估 WHERE 部分,我们对哪些行感兴趣
然后评估 GROUP BY 部分,我们如何组合结果行
然后评估 HAVING 部分,我们对哪些组感兴趣
然后评估 ORDER BY 部分,我们想要这些行/组的哪个顺序
最后,SELECT 部分被评估,我们对哪些列感兴趣
一些数据库引擎允许你规避这一点,通过在 SELECT 部分中按“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 表示非常彻底。是的,子查询需要别名。【参考方案2】:SELECT total, total2, total + total2 as grandtotal from (
SELECT sum(EXPR) as total,
sum(EXPR) as total2,
FROM tablename
) x
【讨论】:
【参考方案3】:SELECT
WITH Sums AS
(
SELECT sum(EXPR) as total,
sum(EXPR) as total2
FROM tablename
)
SELECT SUM(sums);
为您的 tsql 粉丝...
【讨论】:
MySQL 不支持 WITH 子句:***.com/questions/1382573/… @Lasse V. Karlsen:WITH 子句不是专门的 TSQL - Oracle 从 9i 开始支持非递归 WITH。 我不关心 WITH,答案是“为你的 tsql 粉丝”。 我无法正确理解会引发这样一个问题的想法混乱。【参考方案4】:你可以使用变量:
http://dev.mysql.com/doc/refman/5.0/en/user-variables.html
【讨论】:
不,你不能。请参阅我对@kunal 回答的评论。以上是关于一起添加 MySQL 别名字段的主要内容,如果未能解决你的问题,请参考以下文章
arcmap修改字段别名后再次加载又变回原样,要怎么处理才不会改变?