普雷斯托 |Athena:非键列中的重复值

Presto | Athena: Duplicated values in not key column

提问人:Guilherme Corbini 提问时间:11/16/2023 最后编辑:Guru StronGuilherme Corbini 更新时间:11/17/2023 访问量:20

问:

我有下表:

CD_CLIENTE DE_CLIENTE
12345 乔恩一号
23456 约翰二号
34567 乔恩三
12345 乔恩·奥内(Jhon ONEe)

即使使用 for CD_CLIENT我也在我的结果中使用它两次,因为CD_CLIENT相等,但DE_CLIENTE不同DISTINCT

我的问题:

select distinct taxid as CD_CLIENTE, name as DE_CLIENTE
FROM my_table_name
group by distinct taxid, name

我需要这个查询来实现这个结果,没有重复的CD_CLIENTE:

CD_CLIENTE DE_CLIENTE
12345 乔恩一号
23456 约翰二号
34567 乔恩三

我试过这个:

select distinct taxid as CD_CLIENTE, name as DE_CLIENTE
FROM my_table_name
group by distinct taxid, name
CD_CLIENTE DE_CLIENTE
12345 乔恩一号
23456 约翰二号
34567 乔恩三
12345 乔恩·奥内(Jhon ONEe)

并且需要这个:

CD_CLIENTE DE_CLIENTE
12345 乔恩一号
23456 约翰二号
34567 乔恩三
sql distinct presto trino

评论


答:

1赞 Guru Stron 11/17/2023 #1

您正在对两者进行分组,因此您将在输出中获得 和 的所有唯一组合。 在这里无关紧要,因为它使用 select 中的所有列来执行唯一性比较(即您可以删除其中任何一个,或者结果将是相同的)。taxid, nametaxidnameDISTINCTgroup bydistinct

一种选择是从子句中删除并使用聚合 like 或 :namegroup byarbitrarymax

-- sample data
WITH dataset(taxid, name) AS (
    VALUES (12345,  'Jhon One'),
        (23456, 'Jhon Two'),
        (34567, 'Jhon Three'),
        (12345, 'Jhon ONEe')
)

-- query
select taxid, max(name)
from dataset
group by taxid;

输出:

出租车 _col1
12345 乔恩一号
34567 乔恩三
23456 约翰二号

如果你有第三列,你可以用它来解决名称的“冲突”,你可以使用 / ()。max_bymin_bymax_by(name, some_3rd_col)