我想加入或更新以下兩個表,并添加df現有單詞。因此,如果endeavor第一個表中不存在該單詞,則應將其加上其df值,或者如果該單詞hello在兩個表中都存在,df則應將其相加。
僅供參考,我正在使用 MariaDB 和 PySpark 對檔案進行字數統計并計算 tf、df 和 tfidf 值。
表名:df
-------- ----
| word| df|
-------- ----
|vicinity| 5|
| hallo| 2|
| admire| 3|
| settled| 1|
-------- ----
表名:word_list
| word| df|
---------- ---
| hallo| 1|
| settled| 1|
| endeavor| 1|
---------- ---
所以最后更新/合并的表應該是這樣的:
| word| df|
---------- ---
| vicinity| 5|
| hallo| 3|
| admire| 3|
| settled| 2|
| endeavor| 1|
---------- ---
到目前為止,我嘗試做的事情如下:
SELECT df.word, df.df word_list.df FROM df FULL OUTER JOIN word_list ON df.word=word_list.word
SELECT df.word FROM df JOIN word_list ON df.word=word_list.word
SELECT df.word FROM df FULL OUTER JOIN word_list ON df.word=word_list.word
它們都不起作用,我要么得到一個只有null值、一些null值或一些例外的表。我確信必須有一個簡單的 SQL 陳述句來實作這一點,但我已經堅持了好幾個小時,也沒有發現任何與堆疊溢位相關的東西。
uj5u.com熱心網友回復:
您只需要先將兩個表聯合起來,然后在單詞上進行聚合。由于表格的結構相同,因此非常容易。看看這個小提琴。因為您沒有指定,所以我使用了 maria 10.3,但是這些查詢應該完全符合(幾乎)任何 DBMS。
https://dbfiddle.uk/?rdbms=mariadb_10.3&fiddle=c6d86af77f19fc1f337ad1140ef07cd2
select word, sum(df) as df
from (
select * from df
UNION ALL
select * from word_list
) z
group by word
order by sum(df) desc;
UNION 是 JOIN 的垂直表親,即 UNION 垂直或按行連接資料集,而 JOIN 水平添加它們,即通過在輸出中添加列。兩個資料集需要具有相同數量的列才能使 UNION 作業,并且您需要在此處使用 UNION ALL 以便聯合回傳所有行,因為默認行為是回傳唯一行。在這個資料集中,由于settled 在兩個表中的值都是1,如果你不使用ALL 關鍵字,它在UNION 中只有一個條目,所以當你進行求和時,df 的值將是1 而不是2,如你所料。
如果您只是轉移到新表,則不需要 ORDER BY。我剛剛添加它以按照與您的示例輸出相同的順序獲得我的結果。
讓我知道這是否對您有用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/474932.html
下一篇:在sql中加入兩個大查詢
