请求将含WHERE子句CASE WHEN条件的SQL转换为Python代码
将给定SQL转换为Python(Pandas)代码
下面用Pandas实现你提供的SQL逻辑,完全匹配原SQL的查询规则:
步骤1:构造输入数据表
先把SQL中的tab1和tab2转换成Pandas DataFrame:
import pandas as pd # 构造tab1数据(对应SQL中的tab1表) tab1 = pd.DataFrame({ 'id': [1, 2, 3, 4], 'country': ['USA', 'Denmark', 'Russia', 'China'], 'num': [100, 200, 300, 400] }) # 构造tab2数据(对应SQL中的tab2表) tab2 = pd.DataFrame({ 'id': [1, 2, 3, 5], 'person': ['Alice', 'Bob', 'Charlie', 'David'] })
步骤2:执行左连接
对应SQL中的LEFT JOIN tab1 b ON a.id=b.id:
# 左连接,关联字段为id merged_df = pd.merge(tab2, tab1, on='id', how='left')
步骤3:实现WHERE条件过滤
对应SQL中的CASE WHEN逻辑和<> 'Russia'过滤规则:
# 处理CASE WHEN:将Denmark替换为Swiz,其余保持原country值 processed_country = merged_df['country'].apply(lambda x: 'Swiz' if x == 'Denmark' else x) # 过滤掉处理后等于Russia的行 filtered_df = merged_df[processed_country != 'Russia']
步骤4:选择目标列
对应SQL中的SELECT a.id, b.country, a.person, b.num:
result_df = filtered_df[['id', 'country', 'person', 'num']] # 输出结果 print(result_df)
完整整合代码
import pandas as pd # 构造输入表 tab1 = pd.DataFrame({ 'id': [1, 2, 3, 4], 'country': ['USA', 'Denmark', 'Russia', 'China'], 'num': [100, 200, 300, 400] }) tab2 = pd.DataFrame({ 'id': [1, 2, 3, 5], 'person': ['Alice', 'Bob', 'Charlie', 'David'] }) # 左连接 merged_df = pd.merge(tab2, tab1, on='id', how='left') # 条件过滤 processed_country = merged_df['country'].apply(lambda x: 'Swiz' if x == 'Denmark' else x) filtered_df = merged_df[processed_country != 'Russia'] # 选择列并输出 result_df = filtered_df[['id', 'country', 'person', 'num']] print(result_df)
执行后会得到和原SQL一致的输出:左连接保留tab2所有行,原country为Denmark的行经逻辑替换后不会被过滤,country为Russia的行被排除。
内容的提问来源于stack exchange,提问作者pc_pyr
相关产品推荐
相关产品推荐

