Clickhouse中transform相當於when case then


transform是將一列中的特定的值,轉換成另一個值;
有兩種使用方式:
1. transform(x, array_from, array_to, default)
x 要轉換的值。
array_from 用於轉換的常量數組。
array_to ’from’中的值轉換為的常量數組。
default 如果’x’不等於’from’中的任何值,則默認轉換的值。
array_from array_to 擁有相同大小的數組。
類型約束:
transform(T, Array(T), Array(U), U) -> U
TU可以是StringDateDateTime或任意數值類型的。
對於相同的字母(TU),如果數值類型,那么它們不可不完全匹配的,只需要具備共同的類型即可。
例如,第一個參數是Int64類型,第二個參數是Array(UInt16)類型。
如果’x’值等於’array_from’數組中的一個元素,它將從’array_to’數組返回一個對應的元素(下標相同)。否則,它返
’default’。如果’array_from’匹配到了多個元素,則返回第一個匹配的元素

SELECT
transform(SearchEngineID, [2, 3], ['Yandex', 'Google'], 'Other') AS title,
count() AS c
FROM test.hits
WHERE SearchEngineID != 0
GROUP BY title
ORDER BY c DESC
┌─title─────┬──────c─┐
│ Yandex │ 498635 │
│ Google │ 229872 │
│ Other │ 104472 │
└───────────┴────────┘

1.transform(x,array_from
, array_to)
與第一種不同在於省略了’default’參數。
如果’x’值等於’array_from’數組中的一個元素,它將從’array_to’數組返回相應的元素(下標相同)。 否則,它返回’x’
類型約束:
transform(T, Array(T), Array(T)) -> T

SELECT
transform(domain(Referer), ['yandex.ru', 'google.ru', 'vk.com'], ['www.yandex', 'example.com']) AS s,
count() AS c
FROM test.hits
GROUP BY domain(Referer)
ORDER BY count() DESC
LIMIT 10
┌─s──────────────┬───────c─┐
│ │ 2906259 │
│ www.yandex │ 867767 │
│ ███████.ru │ 313599 │
│ mail.yandex.ru │ 107147 │
│ ██████.ru │ 100355 │
│ █████████.ru │ 65040 │
│ news.yandex.ru │ 64515 │
│ ██████.net │ 59141 │
│ example.com │ 57316 │
└────────────────┴─────────┘

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM