【问题标题】:How to query sum of corresponding element of an nested input list?如何查询嵌套输入列表的相应元素的总和?
【发布时间】:2020-03-07 12:16:58
【问题描述】:

我正在尝试输出一个 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}"""

【问题讨论】:

    标签: python sql regex oracle


    【解决方案1】:

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

    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匹配正则表达式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      • 2022-10-15
      • 1970-01-01
      • 2023-02-25
      相关资源
      最近更新 更多