select A.a,b,c,nvl(B.d,0) from A left join ( select a,d from B) B on A.a=B.a用python的merge函数将上述SQL改写
时间: 2024-03-27 09:40:47 浏览: 51
可以使用 pandas 库中的 `merge` 函数来实现上述 SQL 的功能。具体代码如下:
```
import pandas as pd
A = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6], 'c': [7, 8, 9]})
B = pd.DataFrame({'a': [1, 2], 'd': [10, 11]})
result = pd.merge(A, B, on='a', how='left').fillna({'d': 0})
result = result[['a', 'b', 'c', 'd']]
print(result)
```
输出结果为:
```
a b c d
0 1 4 7 10
1 2 5 8 11
2 3 6 9 0
```
其中,`pd.DataFrame` 函数用于创建数据框,`pd.merge` 函数用于合并数据框,`fillna` 函数用于填充缺失值,`[['a', 'b', 'c', 'd']]` 用于选择需要的列。
相关问题
SELECT A.id, NVL(B.value, 0) as valueFROM ALEFT JOIN BON A.id = B.id;模拟运行
假设A表和B表的数据如下:
A表:
| id | name |
|----|------|
| 1 | Tom |
| 2 | Jim |
| 3 | Bob |
B表:
| id | value |
|----|-------|
| 1 | 10 |
| 3 | 20 |
则运行上述代码后的结果为:
| id | value |
|----|-------|
| 1 | 10 |
| 2 | 0 |
| 3 | 20 |
可以看到,左连接保证了即使B表中不存在对应A表的记录,也会返回结果。对于B表中不存在的记录,NVL函数将其value列的值转换为0。
SELECT DISTINCT A.BEGIN_REPAIR_NO, A.PART_NO, A.CREATE_BY, B.EMPLOYEE_NAME AS CREATE_NAME, A.CREATE_TIME FROM TPMDATA.PICKING A LEFT JOIN TPMDATA.SAP_EMPLOYEE B ON A.CREATE_BY = B.EMPLOYEE_NO SELECT nvl(sum(A.CURRENT_QUANTITY),0) FROM TPMDATA.PICKING A LEFT JOIN TPMDATA.sys_part B ON A.PART_NO = B.PART_NO 将这俩条sql语句 合成一条
可以使用子查询将这两条 SQL 查询语句合并成一条:
SELECT DISTINCT
A.BEGIN_REPAIR_NO,
A.PART_NO,
A.CREATE_BY,
B.EMPLOYEE_NAME AS CREATE_NAME,
A.CREATE_TIME,
NVL((SELECT SUM(CURRENT_QUANTITY)
FROM TPMDATA.PICKING
LEFT JOIN TPMDATA.sys_part ON TPMDATA.PICKING.PART_NO = TPMDATA.sys_part.PART_NO
WHERE TPMDATA.PICKING.BEGIN_REPAIR_NO = A.BEGIN_REPAIR_NO AND TPMDATA.PICKING.PART_NO = A.PART_NO), 0) AS CURRENT_QUANTITY
FROM
TPMDATA.PICKING A
LEFT JOIN TPMDATA.SAP_EMPLOYEE B ON A.CREATE_BY = B.EMPLOYEE_NO;
这条语句将原本要查询的 SUM(CURRENT_QUANTITY) 作为子查询嵌入到了主查询中,并且增加了 WHERE 子句,以便查询对应的 BEGIN_REPAIR_NO 和 PART_NO。
阅读全文