我想创建一个窗口函数row_number,按id列和按代码顺序进行划分,在该函数中,我应首先获取E,然后再获取其余记录

时间:2018-11-16 14:07:52

标签: sql hive

id code
1   D
1   S
1   E
1   Y

我想创建一个窗口函数row_number,按id列进行划分,并按代码顺序进行排序,在此我应首先获取E,然后再获取其余记录。

预期的输出就像

id   code
1     E
1     D
1     S
1     Y

我希望E在订购方面排在第一位,按字母顺序不起作用。还有其他方法吗?自定义排序或其他任何配置单元内置功能

2 个答案:

答案 0 :(得分:0)

select * from ids order by(case when code = 'E' then 1 else 2 end), code  ;

答案 1 :(得分:0)

CASE中使用简单的ORDER BY表达式

with t             --sample data only not part of main query
AS                  
(
select 1 id  , 'D'  code UNION ALL
select 1 id  , 'D'  code UNION ALL
select 1 id  , 'S'  code UNION ALL
select 1 id  , 'E'  code UNION ALL
select 1 id  , 'Y'  code
)                    --sample data end
SELECT * FROM t 
             ORDER BY 
                case 
                    code WHEN 'E' 
                           then 1 
                           else 2 
                end,code;

输出(在Hive 0.13上测试)

MapReduce Jobs Launched:
Stage-Stage-1: Map: 1  Reduce: 1   Cumulative CPU: 5.08 sec   HDFS Read: 289 HDFS Write: 20 SUCCESS
Total MapReduce CPU Time Spent: 5 seconds 80 msec
OK
1   E
1   D
1   D
1   S
1   Y
Time taken: 44.95 seconds, Fetched: 5 row(s)