获得两个表GROUP BY的年份总和

时间:2016-01-11 08:01:39

标签: mysql

我正在做一份捐款报告,我有两张桌子和一张桌子。 我希望年复一年得到他们的总和。

tbldonation:
amount      |      received
100         :      2016-01-02 08:42:20
100         :      2015-12-01 09:20:00

tblpubdonation:
amount      |      received
100         :      2015-12-22 09:20:00

我的查询是:

SELECT * from
(
    (SELECT YEAR(received) as YY, sum(amount) as AMT FROM tbldonation)
    UNION ALL
    (SELECT YEAR(received) as YY, sum(amount) as AMT FROM tblpubdonation)
) results
WHERE results.YY <= Curdate()
GROUP BY results.YY
ORDER BY results.YY DESC

我得到的结果却不准确。 它应该是

YY        |       AMT
2016      :       100
2015      :       200

但我的结果是:

YY        |       AMT
2016      :       200
2015      :       100

价值是错误的。

2 个答案:

答案 0 :(得分:0)

您在查询中使用总和(金额)。因此,在tbldonation中,总和变为。在pbldonationsum(金额)= 100.最后,订单以年为单位。所以2016年最初是2015年,最后是2015年。 2015年将不会获得金额值200,因为使用了联盟运营商并且两者都有2015年的普遍。因此,这是根据我自己的数据本身或者一些数据故障。如果我错了,请建议我也这样我可以改善自己。 谢谢。 此致,Raju。

答案 1 :(得分:0)

尝试以下MySql(自MySQL lacks support for FULL JOIN以来。我们必须模拟它)

    SELECT  Yr , SUM(amountSum)
    FROM    ( SELECT    SUM(ISNULL(t1.amount, 0)) AS amountSum ,
                t1.year AS Yr
      FROM      tbldonation t1
      GROUP BY  t1.YEAR
      UNION ALL
      SELECT    SUM(ISNULL(t2.amount, 0)) AS amountSum ,
                t2.year AS Yr
      FROM      tblpubdonation t2
      GROUP BY  t2.YEAR
    ) Tbl
   GROUP BY Tbl.Yr

以下适用于T-SQL

SELECT SUM (ISNULL(t1.amount,0)) + SUM(ISNULL(t2.amount,0)), ISNULL(t1.YEAR,t2.YEAR)
FROM dbo.tbldonation t1 
FULL OUTER JOIN dbo.tblpubdonation t2 ON t1.YEAR = t2.YEAR
GROUP BY t1.YEAR, t2.YEAR