SQL查询:当Codes列包含指定数组值时聚合Total求和
解决方案
你的问题在于Codes是逗号分隔的字符串列,直接用= ANY('5','7')会判断整个字符串是否等于'5'或'7',无法匹配包含这些值的行(比如第三行的'5,7')。以下是不同数据库下的正确查询语句:
MySQL/MariaDB
使用FIND_IN_SET函数(专门用于检查值是否在逗号分隔的字符串中):
SELECT SUM(Total) AS sum_total FROM your_table WHERE FIND_IN_SET('5', Codes) > 0 OR FIND_IN_SET('7', Codes) > 0;
也可以用正则表达式(避免匹配类似'15'这种包含目标值的字符串):
SELECT SUM(Total) AS sum_total FROM your_table WHERE Codes REGEXP '(^|,)5(,|$)' OR Codes REGEXP '(^|,)7(,|$)';
PostgreSQL
将字符串转为数组后,用数组交集操作符&&判断是否存在目标值:
SELECT SUM(Total) AS sum_total FROM your_table WHERE string_to_array(Codes, ',') && ARRAY['5', '7'];
或者用ANY操作符配合数组转换:
SELECT SUM(Total) AS sum_total FROM your_table WHERE '5' = ANY(string_to_array(Codes, ',')) OR '7' = ANY(string_to_array(Codes, ','));
SQL Server
通过STRING_SPLIT拆分字符串后,检查是否存在目标值:
SELECT SUM(Total) AS sum_total FROM your_table WHERE EXISTS ( SELECT 1 FROM STRING_SPLIT(Codes, ',') WHERE value IN ('5', '7') );
以上语句都会返回预期的求和结果14。
内容的提问来源于stack exchange,提问作者bloomingrose
相关产品推荐
相关产品推荐

