配置单元中的表值排序问题

时间:2019-04-27 06:37:03

标签: sql hive sql-order-by

我想以特定方式对表的值进行排序。

我有一个包含以下数据的源表(TestTable)

groupId,Name,subjectCode,PA
1,LEADER,T,67
1,Prem,P,67
1,Prem,T,89
1,Anjali,T,124
1,LEADER,P,234
1,Anjali,P,234
1,Anjali,NP,45
1,Prem,NP,23
1,LEADER,NP,123

我对新表TestSort的预期结果是

1,LEADER,NP,123
1,LEADER,P,234
1,LEADER,T,67
1,Anjali,NP,45
1,Anjali,P,234
1,Anjali,T,124
1,Prem,NP,23
1,Prem,P,67
1,Prem,T,89

我需要在asc中订购第一三列,还必须将领导者记录放在自己的顶部。

我试图做同样的事情,但是我没有得到预期的结果

  

插入覆盖表TestSort,然后从TestTable中依次选择*   groupId asc,Name asc,subjectCode asc;

我得到的结果是

groupId,Name,subjectCode,PA
1,LEADER,T,67
1,LEADER,NP,123
1,Anjali,NP,45
1,Anjali,P,234
1,LEADER,P,234
1,Anjali,T,124
1,Prem,T,89
1,Prem,NP,23
1,Prem,P,67

我在某处做错什么了吗

TRAIL 1

  insert overwrite table TestSort select * from TestTable 
order by 
  case when name = 'LEADER' then '0' else '1' end, 
  groupid, 
  name,
  subjectcode;;
    select * from TestSort;

上述查询的结果是

    groupId,Name,subjectCode,PA
1,Anjali,NP,45
1,LEADER,T,67
1,Prem,T,89
1,Prem,P,67
1,LEADER,NP,123
1,Prem,NP,23
1,Anjali,T,124
1,Anjali,P,234
1,LEADER,P,234

我的期望是将值插入到新表TestSort中。选择查询给了我预期的结果,但是一旦我将这些值插入TestSort中,顺序就会改变。

2 个答案:

答案 0 :(得分:0)

我认为此查询将有效

select *, case when Name = 'LEADER' then '1' else '0' end as rank from Test order by rank desc, groupId, Name ,subjectCode asc;

答案 1 :(得分:0)

您可以将条件直接放在ORDER BY子句中:

select * from test 
order by 
  case when name = 'LEADER' then '0' else '1' end, 
  groupid, 
  name,
  subjectcode;