我的列是由逗號分隔的一串值(沒有特定順序):
event_list
2,100,101,102,103,104,105,106,110,114,121,126,152,185,191,524,150,198,158,111,20
100,101,102,103,104,110,114,121,126,152,175,185,191,150,198,158,111,123,10091
我只對 1、2、10、11、12、13、14 和 20 感興趣。其余的無關緊要。例如 2 - “產品視圖”和 12 - “添加到購物車”。
所以我正在嘗試做類似的事情
CASE WHEN 2 IN event_list THEN 1 ELSE 0 END as product_view flag,
CASE WHEN 12 IN event_list THEN 1 ELSE 0 END as add_to_cart_flag
...
但由于它是 SQL 而不是 Python,我認為上面是不可能的,因此試圖弄清楚如何去做。而且我認為使用正則運算式不會有幫助,因為“120”也會包含“2”。
STRING_SPLIT不是最佳解決方案,因為資料已經是 900Bil 行。
uj5u.com熱心網友回復:
有幾種方法是
SELECT *
FROM YourTable yt
CROSS APPLY
(
SELECT
MAX(CASE WHEN value = '2' THEN 1 ELSE 0 END) as product_view_flag,
MAX(CASE WHEN value = '12' THEN 1 ELSE 0 END) as add_to_cart_flag
FROM STRING_SPLIT(yt.event_list, ',')
) ca
或者
SELECT yt.*,
CASE WHEN adj_event_list LIKE '%,2,%' THEN 1 ELSE 0 END as product_view_flag,
CASE WHEN adj_event_list LIKE '%,12,%' THEN 1 ELSE 0 END as add_to_cart_flag
FROM YourTable yt
CROSS APPLY (SELECT CONCAT(',',yt.event_list,',')) CA(adj_event_list)
如果您實際上是在 900Bil 行上運行它,那么兩者都會很慢。我無法猜測哪個會“獲勝”-您需要同時測驗兩者。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/484687.html
標籤:sql服务器
上一篇:以分鐘為單位顯示時差
