[英]Generate UUID which is same for a group of columns in SQL
有人可以建議一種編寫 SQL 查詢的方法,該查詢將生成一個唯一的 UUID,該 UUID 對於 amazon athena 中的一組列是相同的。
例如,我有一個這樣的表,我想在其中為 columns1、columns2 和 columns3 創建一個 UUID。
column1 | column2 | column3 | column 4
2016 | 101 | 1 | 25
2016 | 101 | 1 | 59
2017 | 105 | 2 | 57
2017 | 105 | 2 | 78
Output 1 必須看起來像
ID | column1 | column2 | column3 | column 4
UUID-1 | 2016 | 101 | 1 | 25
UUID-1 | 2016 | 101 | 1 | 59
UUID-2 | 2017 | 105 | 2 | 57
UUID-2 | 2017 | 105 | 2 | 78
Output 2:應該看起來像
ID | count |column1 | column2 | column3
UUID-1 | 2 |2016 | 101 | 1
UUID-2 | 2 |2017 | 105 | 2
我知道可以在 output 1 上進行分組以生成 output 2。有人可以建議我如何生成 output 1 嗎?
謝謝。
你可以嘗試使用uuid()
function。
SELECT uuid() id,
COUNT(*),
column1 ,
column2 ,
column3
FROM T
GROUP BY column1 ,
column2 ,
column3
編輯
我看到你編輯了你的問題,你可以嘗試使用子查詢和自連接獲取輸出 1
SELECT t1.*,t2.column4
FROM (
SELECT DISTINCT uuid() id,
column1 ,
column2 ,
column3
FROM T
) t1 INNER JOIN T t2
ON t1.column1 = t2.column1
AND t1.column2 = t2.column2
AND t1.column3 = t2.column3
另一種方法是您可以嘗試使用max
window function 為每個column1
、 column2
、 column3
列僅獲取一個 GUID。
select max(id) over (partition by column1,column2,column3) as id,
column1,
column2,
column3,
column4
from
(
SELECT uuid() id,*
FROM T
) t1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.