自从我处理SQL以来已经有一段时间了。假设我有一个包含以下列的表格:公司,年份,价值。
我想创建一个结果集,该结果集对每个公司的总价值求和,但在一列中我想要2015年和其他2016年。
Company | Total 2015 | Total 2016 |
听起来非常基本,但我无法弄明白。
我应该创建两个查询,每年一个吗?如果是这样,我怎样才能在以后加入这两个结果?
答案 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()
。