SQL汇总数字的数字

Moo*_*osa 6 sql presto

我正在使用presto.我有一个数字的ID字段.我想要一个列在id中的数字.因此,如果ID = 1234,我想要一个输出10的列,即1 + 2 + 3 + 4.

我可以使用子字符串来提取每个数字并对它求和,但是有一个我可以使用的函数还是更简单的方法?

Rom*_*nus 0

如果我正确地阅读了您的问题,您希望避免为 ID 中的每个数字硬编码子字符串抓取,例如substring (ID,1,1) + substring (ID,2,1) + ...substring (ID,n,1). 这是不优雅的,并且只有在所有 ID 值的长度都相同的情况下才有效。

您可以使用递归 CTE。这种方式也适用于具有可变值长度的 ID 字段。

免责声明:这在技术上仍然使用substring,但它不会进行笨拙的硬编码抓取

WITH recur (ID, place, ID_sum)
AS
(
    SELECT ID, 1 , CAST(substring(CAST(ID as varchar),1,1) as int)
    FROM SO_rbase
UNION ALL
    SELECT ID, place + 1, ID_sum + substring(CAST(ID as varchar),place+1,1)  
    FROM recur
    WHERE len(ID) >= place + 1
)

SELECT ID, max(ID_SUM) as ID_sum
FROM recur
GROUP BY ID
Run Code Online (Sandbox Code Playgroud)