如何在蜂巢的select语句中编写带有附加列的子查询,该附加列的一个单一值是由某些行的总和获得

时间:2019-06-11 09:16:50

标签: mysql hadoop hive

假设有一个带有列的表格,作为学生表现的详细信息。

Student(name,subject,marks,verdict('pass'/'fail')).

我需要在此表中还有另一列,即-特定学生不及格的科目的成绩总和。

在MySQL中,我可以编写:

select *,
select (sum(marks) from Student where name=s.name and verdict='fail')
from Student s;

但这在蜂巢中不起作用。

  

错误:不支持的子查询表达式无效的子查询。 SELECT中的子查询只能是顶级表达式。

该怎么办?

2 个答案:

答案 0 :(得分:2)

您可以尝试在子查询上使用左联接

  select s.*, t.marks
  from Student s
  left join  (
    select (name ,sum(marks) marks
    from Student 
    where verdict='fail'
    group by name)
  ) t on t.name = s.name 

最终尝试在表格学生列名称上添加适当的索引

答案 1 :(得分:0)

select 
    `name`, 
    `verdict`,
    concat_ws('|', collect_set(`subject`)),
    sum(`marks`)
from Student
group by name,verdict