Mysql MariaDb:如何根据SELECT中的导出结果查找数学计算

Mysql MariaDb:如何根据SELECT中的导出结果查找数学计算,mysql,sql,mariadb,Mysql,Sql,Mariadb,我有一个大型SQL,如下所示: (MariaDb V5.5.65) 这很好用 但是,我需要添加一个派生列,其比率为p3count/intakx*100。两个派生值都是十进制的,但我似乎找不到如何在select中引用它们: SELECT ...., ..., SUM(BJ.intake) as intakeX, (SELECT SUM(ibj.intake) FROM ibj WHERE ibj.p2p3 = 'P3' AND ne.see_id = ibj.ee_id ) as p3count,

我有一个大型SQL,如下所示:

(MariaDb V5.5.65)

这很好用

但是,我需要添加一个派生列,其比率为
p3count
/
intakx
*100。两个派生值都是十进制的,但我似乎找不到如何在select中引用它们:

SELECT ....,
...,
SUM(BJ.intake) as intakeX,
(SELECT SUM(ibj.intake) FROM ibj WHERE ibj.p2p3 = 'P3' AND ne.see_id = ibj.ee_id ) as p3count,
(p3count / intakeX * 100) as ratio, 
...,
...
FROM NewEstablished ne  
INNER JOIN BlindJob BJ ON ...
WHERE ... 
这将返回一个错误,
p3count
/
intakx
是未知列

我在其他地方看到,这些派生的select列被设置为FROM表的一部分(在本例中为
ne
),但这似乎也不起作用

如何引用这些SELECT值作为新的输出列对其进行进一步计算

示例输出:


您可以将查询用作子查询并计算新列:

select t.*,
  (t.p3count / t.intakeX * 100) as ratio
from (
  <your query>
) t

另一个选项是重复相同的表达式:

SELECT ....,
...,
SUM(BJ.intake) as intakeX,
(SELECT SUM(ibj.intake) FROM ibj WHERE ibj.p2p3 = 'P3' AND ne.see_id = ibj.ee_id ) as p3count,
(
  (SELECT SUM(ibj.intake) FROM ibj WHERE ibj.p2p3 = 'P3' AND ne.see_id = ibj.ee_id ) / 
  SUM(BJ.intake) * 
  100
) as ratio, 
...,
...
FROM NewEstablished ne  
INNER JOIN BlindJob BJ ON ...
WHERE ... 

这个问题缺少什么明确性?要在一次选择中实现这一点,我们必须重复这些表达式。为了能够引用指定的别名,我们需要第二个SELECT,或者是CTE,或者是内联视图(将SELECT包装在一组参数中,并将其放入外部查询的FROM子句中,即使其成为内联视图,mysql称之为派生表),然后外部查询具有可供引用的列别名。MySQL缺少的是一个类似Teradata样式
命名的
关键字的扩展,用于代替
AS
,Teradata允许在选择列表的其他位置引用命名别名。我使用的是MariaDb。我的印象是,有一种语法可以做到这一点,而不需要将所有内容都封装在更深的Select子句中?另一种选择是重复相同的表达式。我会编辑。好的,谢谢你的帮助,我想我遗漏了一些更明显的东西。
select t.*,
  (t.p3count / t.intakeX * 100) as ratio
from (
  <your query>
) t
with CTE as (
  <your query>
)
select *,
  (p3count / intakeX * 100) as ratio
from cte
SELECT ....,
...,
SUM(BJ.intake) as intakeX,
(SELECT SUM(ibj.intake) FROM ibj WHERE ibj.p2p3 = 'P3' AND ne.see_id = ibj.ee_id ) as p3count,
(
  (SELECT SUM(ibj.intake) FROM ibj WHERE ibj.p2p3 = 'P3' AND ne.see_id = ibj.ee_id ) / 
  SUM(BJ.intake) * 
  100
) as ratio, 
...,
...
FROM NewEstablished ne  
INNER JOIN BlindJob BJ ON ...
WHERE ...