cte FULL OUTER JOIN MYSQL
cte FULL OUTER JOIN MYSQL
我有这个table(称为试用版):
a, id1, year1, year2, val1, val2
1, A01, 2015, 2025, 17.20, 18.30
2, A02, 2014, 2024, 13.20, 7.80
3, A04, 2013, 2024, 10.00, 10.00
4, A03, 2024, 2014, 12.20, 8.80
5, A05, 2024, 2014, 0.00, 6.00
'year1' 引用列 'val1' 中的值,'year2' 引用列 'val2' 中的值。
我想获得按年份分组的所有值的总和。
所以我希望看到这样的结果:
Year Value per year
2013 10.0
2014 28.0
2015 17.2
2024 30.0
2025 18.3
我使用自连接设置了一个通用的 table 表达式 (cte),如下所示:
SELECT t1.year1, t2.year2, t1.val1, t2.val2, t1.val1+t2.val2 AS val_tot FROM trial t1 FULL OUTER JOIN trial t2 ON t1.year1 = t2.year2 GROUP BY t1.year1;
(添加前四个输出列是为了清楚地了解正在发生的事情)
输出为:
year1 year2 val1 val2 val_tot
2013 NULL 10.0 NULL NULL
NULL 2025 NULL 18.3 NULL
2015 NULL 17.2 NULL NULL
2014 2014 13.2 6.0 19.2
2024 2024 0.0 7.8 7.8
输出显然是不正确的。
我已经尝试修改上面的 SELECT 语句,例如更改 JOIN 类型,更改 GROUP BY 子句或将其删除,以及添加 WHERE 子句,但没有成功。
我用谷歌搜索并阅读了一些网站,但都没有成功,因为我找不到类似的例子,尽管肯定有很多相同的问题。
非常感谢您的帮助。
如果我理解,你想先逆轴再聚合。一种方法是:
select year, sum(val)
from ((select year1 as year, val1 as val from trial t) union all
(select year2, val2 from trial t)
) t
group by year
order by year;
我有这个table(称为试用版):
a, id1, year1, year2, val1, val2
1, A01, 2015, 2025, 17.20, 18.30
2, A02, 2014, 2024, 13.20, 7.80
3, A04, 2013, 2024, 10.00, 10.00
4, A03, 2024, 2014, 12.20, 8.80
5, A05, 2024, 2014, 0.00, 6.00
'year1' 引用列 'val1' 中的值,'year2' 引用列 'val2' 中的值。
我想获得按年份分组的所有值的总和。
所以我希望看到这样的结果:
Year Value per year
2013 10.0
2014 28.0
2015 17.2
2024 30.0
2025 18.3
我使用自连接设置了一个通用的 table 表达式 (cte),如下所示:
SELECT t1.year1, t2.year2, t1.val1, t2.val2, t1.val1+t2.val2 AS val_tot FROM trial t1 FULL OUTER JOIN trial t2 ON t1.year1 = t2.year2 GROUP BY t1.year1;
(添加前四个输出列是为了清楚地了解正在发生的事情)
输出为:
year1 year2 val1 val2 val_tot
2013 NULL 10.0 NULL NULL
NULL 2025 NULL 18.3 NULL
2015 NULL 17.2 NULL NULL
2014 2014 13.2 6.0 19.2
2024 2024 0.0 7.8 7.8
输出显然是不正确的。
我已经尝试修改上面的 SELECT 语句,例如更改 JOIN 类型,更改 GROUP BY 子句或将其删除,以及添加 WHERE 子句,但没有成功。 我用谷歌搜索并阅读了一些网站,但都没有成功,因为我找不到类似的例子,尽管肯定有很多相同的问题。
非常感谢您的帮助。
如果我理解,你想先逆轴再聚合。一种方法是:
select year, sum(val)
from ((select year1 as year, val1 as val from trial t) union all
(select year2, val2 from trial t)
) t
group by year
order by year;