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

请求协助编写SQLite查询:判断同Well内Band A与Band B的ng值关系

问题与解决方案

需求说明

给定如下数据表:

df = pd.DataFrame({'Well': ['A', 'A', 'B', 'B'],
                   'BP': [380., 25., 24., 360.],
                   'ng': [1., 10., 1., 10.],
                  'Band A': [True, False, False, True],
                  'Band B': [False, True, True, False]})

需要编写SQL查询,实现:同一Well分组内,当Band A为True时,若其对应的ng值大于该Well内Band B对应的ng值,则返回True,否则返回False。

原查询问题分析

你之前的查询失败原因是:子查询SELECT ng FROM df WHERE Band_B = True没有关联当前行的Well字段,会返回所有Band B为True的ng值(而非同一Well下的),导致比较逻辑错误。

正确查询方案

方案1:自连接匹配同一Well的Band B记录

通过自连接将同一Well下的Band A和Band B记录关联,直接进行值比较:

sqlcmd = '''
SELECT
    a.Well,
    a.ng,
    CASE
        WHEN a.`Band A` = True AND a.ng > b.ng THEN 'True'
        ELSE 'False'
    END AS Duplicate
FROM df a
LEFT JOIN df b ON a.Well = b.Well AND b.`Band B` = True
ORDER BY a.Well;
'''

pp.pprint(pysqldf(sqlcmd).head())

方案2:窗口函数获取分组内的Band B ng值

用窗口函数按Well分组,提取每个Well中Band B对应的ng值,再进行比较:

sqlcmd = '''
SELECT
    Well,
    ng,
    CASE
        WHEN `Band A` = True AND ng > MAX(CASE WHEN `Band B` = True THEN ng END) OVER (PARTITION BY Well) THEN 'True'
        ELSE 'False'
    END AS Duplicate
FROM df
ORDER BY Well;
'''

pp.pprint(pysqldf(sqlcmd).head())

结果说明

执行上述查询后,会得到如下结果:

WellngDuplicate
A1.0False
A10.0False
B1.0False
B10.0True

内容的提问来源于stack exchange,提问作者Lewis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:27:25