gpt4 book ai didi

sql - 将 MySQL 别名字段加在一起

转载 作者:IT老高 更新时间:2023-10-28 23:48:59 24 4
gpt4 key购买 nike

考虑类似于以下的查询:

 SELECT sum(EXPR) as total,
sum(EXPR) as total2,
sum(total+total2) as grandtotal
FROM tablename

这会出现并显示字段列表中的未知列总数。

是否可以在计算中引用别名字段而无需重新键入求和表达式,因为每边的 sum(EXPR) 都很长。

最佳答案

这是在数据库引擎中执行事物的顺序。

请注意,这是事物如何执行的语义 View ,数据库可能以不同的顺序执行操作,但它必须产生结果,就好像它是以这种方式完成的一样。

  1. 首先评估 FROM 部分,我从哪里获取数据
  2. 然后评估 WHERE 部分,我们对哪些行感兴趣
  3. 然后评估 GROUP BY 部分,我们如何组合结果行
  4. 然后评估 HAVING 部分,我们对哪些组感兴趣
  5. 然后评估 ORDER BY 部分,我们想要这些行/组的顺序
  6. 最后,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

关于sql - 将 MySQL 别名字段加在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3373651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com