如何按一列分组并保留其他字段的值?

时间:2019-08-16 11:01:41

标签: sql apache-spark apache-spark-sql

我有两列,一列是ID,另一列是用户名。但是我的数据不是很好,它包含多个用户的相同ID。我要做的是保留与此类ID对应的用户名之一。

*----*------------*
| ID |  Username  |
*----*------------*
| 1  | kumar      |
| 2  | harold     |
| 2  | kal        |
| 3  | ram        |
*----*------------*

输出应类似于

*----*------------*
| ID |  Username  |
*----*------------*
| 1  | kumar      |
| 2  | harold     |
| 3  | ram        |
*----*------------*

我需要这样做。

3 个答案:

答案 0 :(得分:1)

您可以使用distinct获取重复的1个用户ID。

SELECT DISTINCT column1, column2, ...
FROM table_name;

答案 1 :(得分:0)

您可以尝试这样做,这会将序列号分配给表中所有不同的id。之后,您可以按预期获得每个ID的第一条记录。

 ; with cte as (
  select row_number() over (partition by id order by (select 100)) as Slno, 
  Id, Username from table
  )
  select id, username from cte where slno = 1

测试场景:

Create table Table1   ( id int, TransportID varchar(10) )

insert into table1 ( id, TransportID )
values ( 1 , 'kumar' )
, ( 2 , 'sdsd' )
, ( 2, 'sdfdaw' )
, ( 3, 'sds')

 ; with cte as (
  select row_number() over (partition by id order by (select 100)) as Slno, 
  Id, TransportID from table1
  )
  select id, TransportID from cte where slno = 1

输出将为

id  TransportID
1   kumar
2   sdsd
3   sds

答案 2 :(得分:0)

只需使用聚合:

select id, max(username) as username
from t
group by id;