python - 如何查询嵌套输入列表的相应元素的总和?
问题描述
我正在尝试输出 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}"""
解决方案
您可以通过利用条件聚合创建一个返回预期结果的查询:
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
推荐阅读
- python - 如何使来自不同客户端的 HTTP 请求看起来来自同一个 IP 地址?
- machine-learning - 有状态 LSTM - 批次之间和批次内的隐藏状态转移 (Keras)
- javascript - 什么意思是,“这个接口可以通过在 Node 接口的实例上使用特定于绑定的转换方法来获得。”
- vba - 使用 VBA 根据单元格值插入和复制行
- csv - SPARK:在目录下读取的文件和一些文件缺少带有标题列的列
- javascript - 为什么日期选择器会清除我的输入并在单击后选择?
- cryptography - 具有低熵哈希的 XORed CSPRNG 字节的熵是多少?
- java - 如何通过poi为word中的toc设置字体
- c# - 如何使用 C# Unity Interception 在调用之间登录
- python - 在 Django 模型上允许无效的关键字参数