Hadoop 计数(*)和在蜂箱中一样

Hadoop 计数(*)和在蜂箱中一样,hadoop,hive,hadoop-streaming,hiveql,Hadoop,Hive,Hadoop Streaming,Hiveql,我试图引用count(*),将其另存为total,稍后再引用,但它不起作用 例如: select ((count(*) as total)-count(a)), (total - count(b)), (total - count(c)) from table; 怎么了 我知道这是可以做到的 select (count(*) -count(a)), (count(*) - count(b)), (count(*) - count(c

我试图引用count(*),将其另存为total,稍后再引用,但它不起作用

例如:

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

我知道这是可以做到的

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

但是我只想使用count(*)一次,将其存储为变量并使用该变量

当别名和其他列处于相同的选择级别时,不能将该列用作别名

这是不可能的,因为查询试图在定义别名之前使用它。
如果查看子句的逻辑查询处理顺序,您会发现WHERE子句是在SELECT之前进行逻辑计算的。可以引用SELECT中指定的列别名的唯一子句是ORDER BY,因为它是在SELECT子句之后计算的唯一子句。甚至不能在定义别名的同一SELECT子句中引用别名

这是不可能的。解决方法如下所示:

`select total,total-cntA,total-cntB,total-cntC`
`from`
`(select count(*)total,count(A)cntA,count(b)cntB,count(c)cntC from table1)`