[英]In Snowflake, I want to count duplicates in a table based on all the columns in the table without typing out every column name
[英]Is there a way to use functions that can take multiple columns as input (e.g. `GREATEST`) without typing out every column name?
我有一個包含 100 列的表,我想在其上使用GREATEST
function。 如何防止將每個列名放入查詢中?
我想使用GREATEST
的列有一個通用前綴,以防萬一這可能會有所幫助。
我現在就是這樣做的。
CREATE TEMP TABLE foo (id int, cc_a int, cc_b int, cc_c int);
INSERT INTO foo VALUES (3, '1', '2', '3'), (4, '15', '4', '100');
SELECT id, GREATEST(cc_a, cc_b, cc_c) FROM diff_table
您可以使用例如 JSON 函數將一行轉換為值列表:
SELECT id,
(select max(x.val::int)
from jsonb_each(to_jsonb(f) - 'id') as x(col, val))
from foo f
但我確實同意這聞起來像是一個糟糕的設計。
由於您想對每個id
的大量值進行操作,因此是時候硬着頭皮創建表的 UNPIVOTed 視圖了。
缺點:你必須輸入一百個值
優點:你只需要在你的代碼庫中使用一次
我知道您正在研究 PostgreSQL,因此有一些解決方案,例如基於 hstore 的解決方案,根據回答者的說法,它可能適用於任意大量列。
如果您不能使用 hstore 擴展 - 它沒有安裝在 dbfiddle.com 上。 那么你可以依靠LATERAL JOIN
,靈感來自https://blog.sql-workbench.eu/post/unpivot-with-postgres/ 。 我在這個小提琴中測試了一個解決方案
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.