如何不在 SQL 查询中包含计算,以免违反数学运算顺序 (PEDMAS)?

How to not include calculations in the SQL queries so as to not violate the mathematical order of operations (PEDMAS)?

我想知道是否有另一种方法可以处理 SQL 查询中的数学计算,以优化查询并避免违反计算的数学顺序 (PEDMAS)

下面是一个例子-

SELECT
e.area_code, 
e.A, 
e.B, 
e.B/e.A as Rate, 
e.C, 
e.D, 
e.profit
e.value
FROM
(
Select 
SUM(CASE WHEN type ='stop' THEN 1 ELSE 0 END) A, 
SUM (Case WHEN type = 'start' THEN 1 ELSE 0 END) B,
SUM(C) C, SUM(D) D, 
(SUM(C) - SUM(D)) AS profit, 
(Z-(B/A)/(D/C)) value,
CASE
WHEN SUBSTR(area_code, 1, 3) IN ("469") THEN "TX"
WHEN SUBSTR(area_code, 1, 3) IN ("551") THEN "CA"
WHEN SUBSTR(area_code, 1, 3) IN ("973") THEN "NY"
ELSE "other"
END AS area_code
FROM db.table1
GROUP BY area_code
) AS e

有没有其他有效的方法来处理这个问题?

您不能在同一 SELECT (B/A) 的其他表达式中使用别名 (A, B, ...), ...

您通过嵌套 SELECTs 中途避免了该错误。但是你需要一路走下去。

此外,请不要说 SUM(c) c -- 人类 计算机会混淆哪个 c 是哪个。

这个:

SUM(CASE WHEN type ='stop' THEN 1 ELSE 0 END) A, 

可以缩短为

SUM(type ='stop') A, 

WHEN SUBSTR(area_code, 1, 3) IN ("551") THEN "CA"

WHEN area_code LIKE '551%' THEN 'CA'