mysql - 我可以在查询的许多位置使用列别名吗?

标签 mysql sql

如果我设法在 mysql 中创建以下 View

select id,name,score,total,CALCIT(total - score) as x,(CALCIT(total - score) / total) as per from tblx;

过程CALCIT(total - score)正在计算两次

如何做这样的事情:

select id,name,score,total,CALCIT(total - score) as `x`,`x`/total as per from tblx; 

其中 CALCIT 是一个函数

最佳答案

MySQL 将允许您在 ORDER BY, GROUP BY 子句中使用列别名,但您将无法在 SELECT 列表中重用该别名.如果你真的需要这样做,有许多计算值的实例,你可以做一个 self JOIN 来产生计算。

SELECT 
  id,
  name,
  score,
  total,
  x,
  x / total AS per
FROM tblx JOIN (
    /* Subquery JOIN which performs the calculation */
    SELECT CALCIT(total - score) AS x FROM tblx xcalc
  ) ON tblx.id = xcalc.id

这种方法可能比在一个 SELECT 中重做计算更高效,但与任何事情一样,要通过基准测试才能找到答案。

关于mysql - 我可以在查询的许多位置使用列别名吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9362314/

相关文章:

mysql - 两个查询优化

php - 从php中的存储过程中获取值

php - 未找到基表或 View :1146 in symfony3

mysql - 查询以从 3 个不同的表中获取具有计数的不同键的数据

mysql - 使用嵌套查询对行进行排序(查询其他查询的结果)

mysql - 如何命名 SQL FOREIGN KEY 约束 CREATE 两个表列到关系表中

mysql - 性能 - 良好的设计 : Should I use a trigger or use handle cases manually

php - 如何在 Yii2 中仅使用 1 个连接查询来获取多 ActiveRecord 模型?

mysql - 在其他表中选择最低值的最快方法

SQL查找重叠的时间段和子故障