为了账号安全,请及时绑定邮箱和手机立即绑定

mysql左链接笛卡尔积如何避免?

mysql左链接笛卡尔积如何避免?

开满天机 2018-08-17 05:10:07
我有一张表如图id projectName pId cDate amount period contractNum ownerName archives1  江夏区大桥   1  2017 1900000 1     001     A     12  江夏区大桥   1  2017 1500000 2     001     A     13  江夏区大桥   1  2018 1900000 1     001     A     14  其他区大桥   2  2018 1900000 1     002     B     25  北方区大桥   3  2016 1902451 1     003     C     36  北方区大桥   3  2016 1854695 2     003     C     37  江夏区大桥   1  2016 1500000 1     001     A     18  江夏区大桥   1    2016 1000000 1     001     A     1我想查出年份大于2016的所有记录,每条记录要加上这个项目在2016年前的所有的付款金额的总和,这个sql语句怎么写?我写了一个但是只出了一条数据并且是错误的。SELECT DATE_FORMAT(t.cDate,'%Y') AS YEAR,t.*,SUM(a.amount) FROM wlkgltz1 tLEFT JOIN (SELECT * FROM wlkgltz1 t WHERE DATE_FORMAT(t.cDate,'%Y')<='2016') aON t.pId = a.pIdWHERE DATE_FORMAT(t.cDate,'%Y') > '2016'
查看完整描述

1 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

试一下这个
select w2., w4.sum2016
(select w1. from wlkgltz1 w1 where DATE_FORMAT(w1.cDate,'%Y')>'2016) w2,
(select sum(amount) sum2016 from wlkgltz1 w3 where w3.projectName = w2.projectName and DATE_FORMAT(t.cDate,'%Y')<='2016' group by cDate) w4;

查看完整回答
反对 回复 2018-09-04
  • 1 回答
  • 0 关注
  • 1233 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信