首页 > 解决方案 > 如何查询嵌套输入列表的相应元素的总和?

问题描述

我正在尝试输出 SUMS 列表的列表,并输入正则表达式列表的列表。代码(带有 Oracle DB 的 Python)如下所示:

**my_query** = """SELECT SUM(col) FROM table t WHERE REGEXP_LIKE(t.col2, {reg_expr})"""
outer_list_of_regex = [[reg1,reg2,reg3],[reg4,reg5,reg6],[reg7,reg8,reg9],[reg10,reg11,reg12]]
list_of_sums = []
for inner_list_of_regex in outer_list_of_regex:
   temp_list = []
   for regex in inner_list_of_regex:
      inner_list.append(**my_query**.format(reg_expr = regex))

查询的输入是正则表达式列表的列表。输出具有相同的格式,但是以与输入相同的格式和相应位置返回的每个元素的总和。这种结构适用于短列表,但一旦扩展到合理的长度,投入生产就太慢了。有没有办法在没有嵌套 for 循环的情况下重新配置它?

例如,也许一个带有嵌套列表的查询可以输出每个相应正则表达式的总和。

query = """select ([SUM(reg1),SUM(reg2),SUM(reg3)],[SUM(reg4)....]) FROM table t WHERE t.col2 == {outer_list_of_regex}"""

标签: pythonsqlregexoracle

解决方案


您可以通过利用条件聚合创建一个返回预期结果的查询:

select
    sum(case when regexp_like(col2, {reg1}) then col1 end) reg1,
    sum(case when regexp_like(col2, {reg2}) then col1 end) reg2,
    sum(case when regexp_like(col2, {reg3}) then col1 end) reg3
    ...
from mytable t
where 
    regexp_like(col2, {reg1})
    or regexp_like(col2, {reg2})
    or regexp_like(col2, {reg2})
    or ...

该查询接受正则表达式列表作为参数 ( {reg1}, {reg2}, {reg3}, ...) 并为每个正则表达式返回一列,其中包含与正则表达式匹配的col1每条记录的总和。col2


推荐阅读