You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何拆分SQLite分组查询结果并生成含重复元素的列表

问题:拆分SQL分组查询结果为单条记录格式

我有一个SQLite数据库,存储了fruit_name(水果名称)和freeze_time(冷冻时长)两个字段。执行了以下分组查询代码:

cur1.execute("""SELECT fruit_name, freeze_time,
                        COUNT (*) AS total_fruit
                        FROM fruit_page
                        GROUP BY fruit_name, freeze_days""")

rows = cur1.fetchall()

查询后rows的结果为:

[('Apple', '2', 2), ('Banana','1',2), ('Banana','2',1)]

我需要把结果拆分为以下格式(将每个批次的数量拆成单条记录,数量字段固定为1):

[('Apple', '2', 1), ('Apple', '2', 1), ('Banana','1',1), ('Banana','1',1), ('Banana','2',1)]

或者实现:当有2个冷冻2天的苹果时,执行循环代码后,basket列表能输出[2, 2]而非仅[2]。原循环代码如下:

for i in range(len(rows))
   if fruit_name == apple;
      basket.append(rows[i][1)

解决方案

方案1:Python中拆分结果为单条记录

遍历查询结果,根据total_fruit的数值重复生成对应次数的单条记录:

# 假设原查询结果rows为给定值
rows = [('Apple', '2', 2), ('Banana','1',2), ('Banana','2',1)]

split_rows = []
for fruit, days, count in rows:
    # 按count次数添加单条记录
    split_rows.extend([(fruit, days, 1)] * count)

print(split_rows)
# 输出:[('Apple', '2', 1), ('Apple', '2', 1), ('Banana', '1', 1), ('Banana', '1', 1), ('Banana', '2', 1)]

方案2:修正循环逻辑生成目标basket列表

调整循环逻辑,根据total_fruit的次数重复添加冷冻时长值:

basket = []
rows = [('Apple', '2', 2), ('Banana','1',2), ('Banana','2',1)]

for fruit, days, count in rows:
    if fruit == 'Apple':
        # 按count次数添加days到basket
        basket.extend([days] * count)

print(basket)
# 输出:['2', '2']

注意事项

原SQL语句里的GROUP BY freeze_days是笔误,数据库字段是freeze_time,需要修正为GROUP BY fruit_name, freeze_time,否则会触发字段不存在的错误。


内容的提问来源于stack exchange,提问作者Justin Habel Kiswanto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 08:24:19