pri*_*nka 7 hadoop hive hiveql
这是我的蜂巢表:
course dept subject status
btech cse java pass
btech cse hadoop fail
btech cse cg detained
btech cse cc pass
btech it daa pass
btech it wt pass
btech it cnn pass
mba hr hrlaw pass
mba hr hrguid absent
mtech cs java pass
mtech cs cd pass
mtech cs cp detained
Run Code Online (Sandbox Code Playgroud)
我想查询此表以通过以下方式检索数据:
course dept status
btech cse fail
btech it pass
mba hr absent
mtech cs fail
Run Code Online (Sandbox Code Playgroud)
首先,它将检查status每个中的"失败"或"被扣留" dept并course组合在一起.如果发现"失败"或"被扣留",它将输出"失败"作为status.否则,如果在同一组中发现"缺席",则将输出"缺席"作为status.否则,它将输出"通过".
我运行以下查询时收到错误消息:
select course,dept,
case
when status in ( 'fail','detained') then 'fail'
when status in ( 'absent') then 'absent'
when status in ( 'pass') then 'pass'
else null
end as Final_Status
from college
group by course,dept;
Run Code Online (Sandbox Code Playgroud)
小智 13
按课程和部门分组时,您将获得状态列的多个值(针对不同的记录),这需要进行处理.
select中不属于group by的任何列都应该在一个聚合函数中,
这是一个使用sum()函数的解决方案.
select course, dept,
case when sum(case when status in ( 'fail','detained') then 1 else 0 end) > 0 then 'fail'
when sum(case when status in ('absent') then 1 else 0 end) > 0 then 'absent'
when sum(case when status in ('pass') then 1 else 0 end) > 0 then 'pass'
else 'no_result'
end as final_status
from college
group by
course,dept
Run Code Online (Sandbox Code Playgroud)
如果我理解正确的话,你想要这样的东西:
select course,dept,
case
when status in ( 'fail','detained') then 'FAILED'
when status in ( 'absent') then 'absent'
when status in ( 'pass') then 'PASSED'
else null
end as Final_Status
from college
group by course,dept,
CASE when status in ( 'fail','detained') then 'FAILED'
when status in ( 'absent') then 'absent'
when status in ( 'pass') then 'PASSED'
else null END;
Run Code Online (Sandbox Code Playgroud)
我在 GROUP 中使用 CASE,它与 Hive 配合得很好。
| 归档时间: |
|
| 查看次数: |
54985 次 |
| 最近记录: |