【问题标题】:Count(*) and As in HiveHive 中的 Count(*) 和 As
【发布时间】:2014-02-25 04:32:13
【问题描述】:

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

例如:

  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(*) 一次,将其存储为变量并使用该变量

【问题讨论】:

    标签: hadoop hive hadoop-streaming hiveql


    【解决方案1】:

    当别名和其他列在 SELECT 的同一级别时,您不能将该列用作别名。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-13
        • 1970-01-01
        • 2015-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多