SQL列的筛选方式不同

时间:2016-10-08 23:02:47

标签: sql oracle

自从我处理SQL以来已经有一段时间了。假设我有一个包含以下列的表格:公司,年份,价值。

我想创建一个结果集,该结果集对每个公司的总价值求和,但在一列中我想要2015年和其他2016年。

Company | Total 2015 | Total 2016 | 

听起来非常基本,但我无法弄明白。

我应该创建两个查询,每年一个吗?如果是这样,我怎样才能在以后加入这两个结果?

3 个答案:

答案 0 :(得分:3)

这是使用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

答案 1 :(得分:2)

这称为条件聚合。

from math import sqrt

def point_distance_to_line_segment((x,y),(lx1, ly1),(lx2, ly2)):
    line_length = sqrt((lx1-lx2)**2+(ly1-ly2)**2)
    dot_product = (x-lx1)*(lx2-lx1)+(y-ly1)*(ly2-ly1)

    proj_line = dot_product/line_length

    if proj_line < 0:
        # close to (x1,y1)
        return sqrt((x-lx1)**2+(y-ly1)**2)
    elif proj_line > line_length:
        # close to (x2,y2)
        return sqrt((x-lx2)**2+(y-ly2)**2)
    else:
        # in the middle
        cross_product = abs((x-lx1)*(ly2-ly1)-(y-ly1)*(lx2-lx1))
        return cross_product/line_length


line_pts = [(-1, 0), (0, 1), (1, 0), (2,0)]
test_p = (-1, 0)

print min([point_distance_to_line_segment(test_p,lp1,lp2) 
           for (lp1,lp2) in zip(line_pts[0::2], line_pts[1::2])])

答案 2 :(得分:-2)

如果计算逻辑有点复杂,请将其推送到用户定义的函数。

提示:

SELECT company, f_total(2015) total_2016, f_total(2016) total_2016;

在这里,您只编写一个以年份为参数的函数f_total()