2021-03-17_SQL练习
如下一张合同表T0317
现在想获得每个直接合同的价格以及对应的补充合同的价格,得到的结果大致如下:该如何写这个SQL?
测试数据:
CREATE TABLE T0317 ( ID INT, Type VARCHAR(20), MasterID INT, Amount INT ) INSERT INTO T0317 VALUES (1,'直接合同',NULL,5000); INSERT INTO T0317 VALUES (2,'补充合同',1,1000); INSERT INTO T0317 VALUES (3,'补充合同',1,500); INSERT INTO T0317 VALUES (4,'直接合同',NULL,6000); INSERT INTO T0317 VALUES (5,'直接合同',NULL,4000); INSERT INTO T0317 VALUES (6,'补充合同',5,1000);
参考答案:
思路: 使用连表查询,将补充合同的MasterID和直接合同的ID对应,再将type=直接合同的条件过滤数据,最后根据ID进行分组,输出ID,Type,补充合同的金额使用IFNULL(SUM(Amount),0)2个函数进行计算. SELECT A.ID,A.Type,A.Amount,IFNULL(SUM(B.Amount),0) FROM T0317 A LEFT JOIN T0317 B ON A.ID=B.MasterID WHERE A.Type='直接合同' GROUP BY A.ID;