我有一张表:
|------------------------|
|day name trees_planted|
|------------------------|
|1 | alice | 3 |
|2 | alice | 4 |
|1 | bob | 2 |
|2 | bob | 4 |
|------------------------|
我使用SELECT name, SUM(trees_planted) FROM year2016 GROUP BY name
获取:
name | trees_planted
alice | 7
bob | 6
但是接下来我还有2015年的另一张桌子,我希望将结果与前一年进行比较,例如,如果爱丽丝在2016年种植的树木比2015年多,我会得到这样的结果:
name | tree_difference
alice | -2 (if previous year she planted 5 trees, 5 -7 = -2)
bob | 0 (planted the same number of trees last year)
答案 0 :(得分:1)
您可以使用子查询来获取2016年和2015年的记录,但是否定2016年的值。然后像您已经做的那样进行分组和总结:
SELECT name,
SUM(trees_planted) AS tree_difference
FROM (SELECT name, trees_planted
FROM year2015
UNION ALL
SELECT name, -trees_planted
FROM year2016
) AS years
GROUP BY name
这也适用于仅在两年中的一年中给出数字的情况。
答案 1 :(得分:0)
假设您可以使用user
字段加入,您可以执行以下操作:
select a.name, a.tp, b.tp, a.tp - b.tp
from
(
(select name, SUM(trees_planted) tp from year2016 group by name) a
inner join
(select name, SUM(trees_planted) tp from year2015 group by name) b
using(name)
)
如果您无法加入字段user
(您在2015年和2016年拥有不同的用户组),则可以通过使用几个{{{}来轻松添加缺少的信息1}}条款。
这是指向SQLFIDDLE的人工数据链接以尝试查询。