[英]How can I find if a SQL Server column is a primary key in a single SQL statement?
[英]How can I find the variation in strings in a single column using Snowflake SQL?
假設我有一張這樣的桌子:
人1 | 人2 |
---|---|
戴夫 | 弗雷德 |
戴夫 | 戴夫 |
戴夫 | 麥克風 |
弗雷德 | 戴夫 |
戴夫 | 麥克風 |
戴夫 | 傑夫 |
在“Person1”列中,顯然 Dave 是最受歡迎的輸入,所以我想生成一個“相似度得分”或“列內變化”得分,以反映 SQL(Snowflake)中的得分。
相反,對於“Person2”列,字符串之間的變化更多,因此相似度得分會更低,或者列內的變化更高。 因此,您最終可能會得到類似分數輸出:'Person1': 0.9, 'Person2': 0.4。
如果這只是逐行的 Levenshtein 距離 (LD),我如何在這些之間推動 EDITDISTANCE 以獲得每列的分數? 目前我只能看到如何在“Person1”和“Person2”之間獲得 LD,而不是在“Person1”和“Person2”之間。
非常感謝
您提出的 0.9 和 0.4 的值似乎是相同的比率,因此可以使用 count 和 ratio_of_report 來計算,如下所示:
with data(person1, person2) as (
select * from values
('Dave','Fred'),
('Dave','Dave'),
('Dave','Mike'),
('Fred','Dave'),
('Dave','Mike'),
('Dave','Jeff')
), p1 as (
select
person1
,count(*) as c_p1
,ratio_to_report(c_p1) over () as q
from data
group by 1
qualify row_number() over(order by c_p1 desc) = 1
), p2 as (
select
person2
,count(*) as c_p2
,ratio_to_report(c_p2) over () as q
from data
group by 1
qualify row_number() over(order by c_p2 desc) = 1
)
select
p1.q as p1_same,
p2.q as p2_same
from p1
cross join p2
;
給予:
P1_SAME | P2_SAME |
---|---|
0.833333 | 0.333333 |
所以使用全交叉連接,我們可以計算所有值的編輯距離,並找到它與總數的比率:
with data(person1, person2) as (
select * from values
('Dave','Fred'),
('Dave','Dave'),
('Dave','Mike'),
('Fred','Dave'),
('Dave','Mike'),
('Dave','Jeff')
), combo as (
select
editdistance(da.person1, db.person1) as p1_dist
,editdistance(da.person2, db.person2) as p2_dist
from data as da
cross join data as db
)
select count(*) as c
,sum(p1_dist) as s_p1_dist
,sum(p2_dist) as s_p2_dist
,c / s_p1_dist as p1_same
,c / s_p2_dist as p2_same
from combo
;
但是考慮到 editdistance 給出相同的結果為零和差異的正值,這些的縮放與期望的結果不一致......
鑒於Jarowinklet 相似度結果已經在 0 到 100 之間縮放,因此能夠對其進行平均更有意義。
select
avg(JAROWINKLER_SIMILARITY(da.person1, db.person1)/100) as p1_dist
,avg(JAROWINKLER_SIMILARITY(da.person2, db.person2)/100) as p2_dist
from data as da
cross join data as db;
P1_DIST | P2_DIST |
---|---|
0.861111111111 | 0.527777777778 |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.