总和列,但对于每一行
Posted
技术标签:
【中文标题】总和列,但对于每一行【英文标题】:Sum column but for each row 【发布时间】:2018-10-11 00:36:03 【问题描述】:怎么做
我想得到像
这样的结果而我已经尝试过的就是这样
select no, student, sum(point) from student group by no, student
但结果并不像我预期的那样。
【问题讨论】:
你的逻辑不干净,说明你如何得到 10 的sum_point
和 2 的 extra_point
?
:(该死,我读错了专栏。以后你会粘贴示例数据作为文本吗?(想象一下,如果答案是查询的图像,会很沮丧。)这是一个格式化链接固定表ozh.github.io/ascii-tables
@Used_By_Already 感谢您的链接,我会记住的.. :)
【参考方案1】:
您似乎想要一个“运行总和”,例如
select
no
, student
, sum(point) over(partition by student order by no) run_sum
from student
而且看起来加分可能会像这样从决赛中减去倒数第二个总和。
WITH cte
AS (
SELECT
no
, student
, SUM(point) OVER (PARTITION BY student ORDER BY no) run_sum
, ROW_NUMBER() OVER (PARTITION BY student ORDER BY no DESC) rn
FROM student)
SELECT
t.*
, coalesce(t.rum_sum,0) - coalesce(ex.run_sum,0) AS extra_point
FROM cte t
LEFT JOIN (
SELECT
*
FROM cte
WHERE rn = 2) ex ON t.student = ex.student
AND t.rn = 1
AND ex.rn = 2
;
但没有关于 extra_point 所需逻辑的更多指导,这只是猜测。
【讨论】:
很抱歉,我没有为我的结果提供解释逻辑,但上面的答案正是我想要的。感谢您的帮助,我支持您.. :)以上是关于总和列,但对于每一行的主要内容,如果未能解决你的问题,请参考以下文章