我正在尝试引用count(*),将其保存为total并稍后引用它但它不起作用
例如:
select ((count(*) as total)-count(a)),
(total - count(b)),
(total - count(c))
from table;
怎么了?
答案 0 :(得分:0)
SELECT (count(*) - count(a)) AS Column1
,(count(*) - count(b)) AS Column2
,(count(*) - count(c)) AS Column3
from table;
答案 1 :(得分:0)
有什么问题? SQL不允许您在同一select
语句中使用列别名。这是为了防止由以下内容引起的歧义:
select a as b, b as a, b - c
第三个b
指的是什么?标准很明确:它指的是表中的列。
此外,您无法在表达式的中间定义列别名。这些是结果集中列的名称,而不是变量。
您可以将total
替换为表达式count(*)
:
select (count(*) - count(a)),
(count(*) - count(b)),
(count(*) - count(c))
from table;
我认为你可以像在任何其他SQL方言中那样使用子查询在hive中执行此操作:
select (const.total - count(a)),
(const.total - count(b)),
(const.total - count(c))
from table cross join
(select count(*) as total from table) const