2017-07-06 32 views
-1

我想返回一个总和,这是返回的多行数据的总和。我试图返回显示员工,帐户和部门的数据。我想要这三个数据点支付的工资总和。我还希望员工只能拿出一笔钱来显示他们的工资是如何分配的。下面是一个例子。任何帮助,将不胜感激。oracle sql:我如何在选择统计中总结不同的数据点?

example

+1

请分享你已经想出了查询。 –

回答

0

您可以在使用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' 
-1

这将返回每个雇员的工资

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

这并没有充分回答这个问题,我不确定这是否真的有用。他们想要多个款项。这可以通过使用窗口子句(如使用@McGlothlin)或通过连接逻辑完成...... – Jacobm001

+0

问题的最后两个句子正在解决。他要求员工支付一笔款项,然后说明任何信息都有帮助。 –

-2

大厦在什么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 
+1

那么,你从偷的答案中补充了什么? – Jacobm001

+0

我已经添加了百分比计算,以便查询实际返回请求的结果。你真的看过附加的截图吗? – fhossfel

0

什么fossoss写道基本上我是如何工作的。 这里是我曾尝试:

选择员工,活动,SUM(salary_amt),SUM(salary_amt)OVER从MYTABLE (PARTITION BY员工)AS “按雇员工资总额” 其中员工= 'XXX' 通过员工的团体,活动

我被表达得到误差总和员工是不是一组

+0

请参阅我的答案中的修改。此外,这可能应该是对你的问题的编辑,而不是本身的答案。 – McGlothlin