自从我处理SQL以来已经有一段时间了。假设我有一个包含以下列的表格交易:公司,年份,价值。不同过滤的SQL列
我想创建总结每家公司总价值一个结果,但在一个专栏中,我想2015年和2016年等
Company | Total 2015 | Total 2016 |
听起来很基本的,但我一直没能图出来。
我应该创建两个查询,每年一个?如果是这样,我怎样才能在以后加入这两个结果?
自从我处理SQL以来已经有一段时间了。假设我有一个包含以下列的表格交易:公司,年份,价值。不同过滤的SQL列
我想创建总结每家公司总价值一个结果,但在一个专栏中,我想2015年和2016年等
Company | Total 2015 | Total 2016 |
听起来很基本的,但我一直没能图出来。
我应该创建两个查询,每年一个?如果是这样,我怎样才能在以后加入这两个结果?
下面是使用conditional aggregation
一个选项:
select company,
sum(case when year = 2015 then value end) total2015,
sum(case when year = 2016 then value end) total2016
from Transaction
group by company
这就是所谓有条件的聚集。
select
company,
sum(case when year = 2015 then value else 0 end) as sum2015,
sum(case when year = 2016 then value else 0 end) as sum2016
from transaction
group by company
order by company;
如果计算逻辑有点复杂,则将其推送到用户定义的函数。
提示:
SELECT company, f_total(2015) total_2016, f_total(2016) total_2016;
在这里,你只写一个函数f_total()
是引入口一年参数。
这真的是一个糟糕的建议。 –
那么,编写一个聚合自定义函数也可能很复杂;-)无论如何,这个函数当然也应该把'value'作为参数。 –
这是oracle 11g吗? –
'条件聚合'应该可以与大多数数据库一起工作... – sgeddes
它的工作原理,谢谢。 –