hive连接

7z5jn7bk  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(384)

我有以下数据

name  location
Scott Toronto
James Alaska
Tiger London
James Alaska

我想连接名称和位置。它应该返回一个具有不同值的列,按位置和名称排序。
我试了一下,但没有成功。

select distinct concat(name,' ', location) from table1 order by location,name;
select distinct concat_ws(' ',name,location) from table1 order by location, name;

然后我试着用以下方法

select distinct name from (select name,location,concat_ws(' ',name,location)name from table1 order by location,name)x;

这将返回不同的值,但不是按所需的排序顺序。
请告诉我什么是最好的方法?

wlp8pajw

wlp8pajw1#

我不知道“没用”是什么意思。但你的第一个版本只能和 group by . 这就是你想要的:

select concat(name, ' ', location)
from table1
group by name, location
order by location, name;

您可能需要这样写:

select nl
from (select concat(name, ' ', location) as nl, location, name
      from table1
      group by name, location
     ) nl
order by location, name;

这确实有一个问题——模棱两可——如果你有“a b” name 在一行中的位置“c”,然后在另一行中的位置“a”和“bc”,则串联的值是相同的。但上面会返回两行。
要解决该潜在问题(这似乎不太可能),您可以使用:

select concat(name, ' ', location) as nl
from table1
group by nl
order by min(location), min(name);

这适用于 group by 因为你可以在 order by . 它不适用于 select distinct 因为在 select distinct .

相关问题