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在订购方面排在第一位,按字母顺序不起作用。还有其他方法吗?自定义排序或其他任何配置单元内置功能
答案 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)