Oracle SQL:如何在 SELECT 语句中对不同的数据点求和?



我正在尝试返回一个总和,该总和是返回的多行数据的总和。 我正在尝试返回显示员工、帐户和部门的数据。 我想要这三个数据点支付的工资总和。 我还想要一笔员工总和,以显示他们的工资是如何分配的。 下面是一个示例。 任何帮助将不胜感激。

fhossfel写的基本上是我希望它的工作方式。 这是我尝试过的:

选择员工、活动、总和 (salary_amt(、总和 (salary_amt( 超过(按员工划分(作为"员工总工资" 从我的表 其中员工 = 'xxx' 按员工、活动分组

我收到错误,即员工总和不是按表达式分组

您可以使用SUM分析函数在窗口子句中通过不同的组来实现此目的。

SELECT employee
, account
, dept
, SUM (salary) OVER (PARTITION BY employee) AS employee_salary
, SUM (salary) OVER (PARTITION BY dept) AS dept_salary_paid
, SUM (salary) OVER (PARTITION BY account) AS acct_salary_paid
FROM mytable

我不确定这些分组是否正是您想要的(也许我误解了您的问题(,但它应该给您正确的想法。窗口子句为您提供了更大的灵活性,并允许您按不同的值对总和进行分组,而GROUP BY则强制每个SELECT进行单个分组。

根据您最近的更新进行编辑:

您不需要GROUP BY和窗口子句。您可以执行两个不同的OVER(PARTITION BY ....)子句,因此它看起来像这样:

select employee
, activity
, SUM (salary_amt) OVER (PARTITION BY employee, activity) AS "total salary by employee and activity"
, SUM (salary_amt) OVER (PARTITION BY employee) AS "total salary by employee"
from mytable where employee = 'xxx'

这将返回每个员工的工资总和

SELECT employee, SUM(salary)
FROM Table
GROUP BY employee

基于McGothlin已经发布的内容:

SELECT employee
, account
, dept
, salary
, SUM (salary) OVER (PARTITION BY employee) AS "total salary by employee"
, ROUND(salary / SUM (salary) OVER (PARTITION BY employee) * 100) || '%' AS "salary distribution"
FROM mytable

最新更新