Mysql MariaDb:如何根据SELECT中的导出结果查找数学计算
我有一个大型SQL,如下所示: (MariaDb V5.5.65) 这很好用 但是,我需要添加一个派生列,其比率为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,
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 ...