引用计数(*)为hive中的总数,并在稍后的相同select语句中使用total

时间:2014-02-24 22:43:46

标签: sql hadoop hive hiveql

我正在尝试引用count(*),将其保存为total并稍后引用它但它不起作用

例如:

  select ((count(*) as total)-count(a)),
  (total - count(b)),
   (total - count(c))
    from table;

怎么了?

2 个答案:

答案 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