如何不在 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'
我想知道是否有另一种方法可以处理 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'