【问题标题】:Query does not found column, suggests same column in Hive SQL查询未找到列,建议 Hive SQL 中的同一列
【发布时间】:2017-08-18 09:15:00
【问题描述】:

我在 SQL 中有以下查询:

select midquery.account, midquery.name, midquery.label,  midquery.labelfrequency
from(

    -- Count the appearance of each label.

    select count(*) as labelfrequency, account, name, label
    from(

        select account, name, label from myTable 

    ) innerquery

    group by account, name, label
) midquery

-- Select most frequent values only.
where rank() over 
    (partition by midquery.account, midquery.name 
     order by midquery.labelfrequency desc) = 1     

这个想法是找到每个名称帐户集最频繁的标签。当我运行此查询时,我收到以下错误:

Error while compiling statement: FAILED: SemanticException [Error 10002]: Line 12:74 Invalid column reference 'labelfrequency': (possible column names are: labelfrequency, account, name, label)

我不太明白为什么解释器找不到列 labelfrequency 但可以提出建议。您对如何解决此问题有任何建议吗?

编辑:如果我将 rank() 移动到选择部分,我会得到结果。

select midquery.account, midquery.name, midquery.label,  midquery.labelfrequency, 
    rank() over (partition by midquery.account, midquery.name 
     order by midquery.labelfrequency desc)
from(

    -- Count the appearance of each label.

    select count(*) as labelfrequency, account, name, label
    from(

        select account, name, label from myTable 

    ) innerquery

    group by account, name, label
) midquery

【问题讨论】:

    标签: sql hive rank


    【解决方案1】:

    WHERE 子句中根本不允许使用窗口函数。这有充分的理由,但您可以将其视为 SQL 的另一条规则——类似于无法识别列别名。

    (真正的原因是指定当有多个过滤条件时窗口函数将如何操作。(几乎?)不可能提出一套连贯的规则。)

    话虽如此,您可以简化查询:

    select t.account, t.name, t.label, t.labelfrequency
    from (select count(*) as labelfrequency, account, name, label,
                 rank() over (partition by account, name
                              order by count(*) desc
                             ) as seqnum
          from myTable t
          group by account, name, label
         ) t
    where seqnum = 1;
    

    即窗口函数和聚合函数可以结合使用。而且您不需要子查询来仅指定少数 a 列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-24
      • 2021-06-06
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-20
      相关资源
      最近更新 更多