【发布时间】:2021-08-03 22:06:58
【问题描述】:
我有一个语法问题。我正在尝试 Anthony DeBarros 的“Practical SQL”一书中的练习。我进行了练习,其中涉及创建两个新列,这些列基于来自两个不同数据集的四列创建百分比变化。下面的查询运行良好:
SELECT pls14.stabr AS us_state,
sum(pls14.gpterms) AS terminals_2014,
sum(pls09.gpterms) AS terminals_2009,
round( (CAST(sum(pls14.gpterms) AS decimal(10,1)) - sum(pls09.gpterms)) /
sum(pls09.gpterms) * 100, 2 ) AS terminal_pct_change,
sum(pls14.pitusr) AS term_uses_2014,
sum(pls09.pitusr) AS term_uses_2009,
round( (CAST(sum(pls14.pitusr) AS decimal(10,1)) - sum(pls09.pitusr)) /
sum(pls09.pitusr) * 100, 2 ) AS term_uses_pct_change
FROM pls_fy2014_pupld14a pls14 JOIN pls_fy2009_pupld09a pls09
ON pls14.fscskey = pls09.fscskey
WHERE pls14.gpterms >= 0 AND pls09.gpterms >= 0
GROUP BY pls14.stabr
ORDER BY terminal_pct_change DESC;
结果如下表:
us_state terminals_2014 terminals_2009 terminal_pct_change term_uses_2014 term_uses_2009 term_uses_pct_change
"GU" 547 59 827.12 39842 19564 103.65
"DC" 1000 594 68.35 1050623 140251 649.10
"AK" 994 618 60.84 771075 1061498 -27.36
"DE" 772 487 58.52 622515 451689 37.82
"ID" 1792 1151 55.69 1878131 1986141 -5.44
"CO" 6407 4172 53.57 7395748 7672580 -3.61
我想添加一个列,向我展示terminal_pct_change 和term_use_pct_change 列之间的简单区别。我尝试了很多东西,但没有任何效果。我不确定在哪里插入以下行。
terminal_pct_change - term_uses_pct_change AS kept_up
我很想 a) 让这个工作,但更重要的是 b) 了解解决方案的工作原理。
谢谢!
【问题讨论】:
-
重复表达式、使用子查询或使用 CTE。
-
不可能在同一
SELECT子句中重用来自SELECT子句的列别名。如果您将另一个选择包装在您的语句周围,您可以引用别名(您的语句成为子选择,您可以像访问表格一样在此位置访问)。
标签: sql postgresql group-by