gpt4 book ai didi

mysql - 在一个(子)查询中使用别名进行计算

转载 作者:行者123 更新时间:2023-11-29 05:55:39 26 4
gpt4 key购买 nike

我有一个包含数据的表,我正在尝试在查询中进行以下计算:IDO/IDP * 100。

**TBL**
Name IDP IDO
ABC 123 231
DEF 124 NULL
GHI 125 NULL
JKL 126 342
KNM 127 NULL

我设法计算出进行计算所需的所有值,并为每个值指定了一个别名。这是我目前所拥有的,但是计算部分返回一个错误,告诉我不支持引用。

SELECT
SUM(case when IDP is not null then 1 end) as Checked,
SUM(case when IDO is null then 1 end) as NotChecked,
(SELECT Checked / NotChecked) * 100 AS Result
FROM TBL

我也试过使用子查询,但它导致了同样的错误。

SELECT
SUM(case when IDP is not null then 1 end) as Checked,
SUM(case when IDO is null then 1 end) as NotChecked,
(
SELECT Checked / NotChecked * 100 AS Result FROM TBL
)
FROM TBL

执行此操作的正确或更好方法是什么?

最佳答案

我认为您不能在同一 SELECT 子句中引用在 SELECT 子句中创建的别名。

您可能知道,您可以像下面这样重复逻辑(尽管我假设您的问题的目的是避免将逻辑写两次)。

SELECT
SUM(case when IDP is not null then 1 end) as Checked,
SUM(case when IDO is null then 1 end) as NotChecked,
(SUM(case when IDP is not null then 1 end) / SUM(case when IDO is null then 1 end)) * 100 AS Result
FROM TBL

不重复逻辑的子查询版本如下。请注意,别名是在子查询中创建的,因此外部查询可以毫无问题地引用它们。

SELECT
Checked, NotChecked, (Checked / NotChecked) * 100 as Result
FROM
(
SELECT
SUM(case when IDP is not null then 1 end) as Checked,
SUM(case when IDO is null then 1 end) as NotChecked
FROM TBL
) tt

因为你似乎没有求和,只是计算 null/non-null 值,我个人觉得 sum/case 语句有点困惑,可能更喜欢这样的东西:

SELECT
Checked, NotChecked, (Checked / NotChecked) * 100 as Result
FROM
(
SELECT
count(IDP) as Checked,
count(*)-count(IDO) as NotChecked
FROM TBL
) tt

关于mysql - 在一个(子)查询中使用别名进行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49701619/

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