0

是否可以像使用SQL一样显示下面的员工详细信息?如何显示员工详细信息以及所有员工的总金额(sal)?

Emp_id, Emp_name, Emp_Sal, Sum(Emp_Sal) 

注:这里Sum(Emp_Sal)是全体员工的总和。

+0

Sum(Emp_Sal)是否适用于所有员工? 'Emp_Sal'与个人员工的'Sum(Emp_Sal)'有什么不同? – Arulkumar

+0

是的..我想显示所有员工的总和...... –

+1

您可以给出您想要的输出的一个例子。 – XING

回答

4

Arulkumar提供正确的解决方案,使用标量子查询。

以下解决方案使用分析功能。注意窗口子句:它是空的,因为我们想要一个组(所有员工),所以没有“partition by”,并且我们想要添加所有行,所以没有“order by”(默认情况下意味着所有行都排列为“相等”,我们得到所有行的总和)。

优点是你只需要经过一次基表。在“标量子查询”方法中,该表被读取两次。在这个简单的例子中,这可能并不重要,但它在生产中可能很重要,并且具有非常大的表格。

select empno, msal, sum(msal) over() as total_sal from employees; 



    EMPNO  MSAL TOTAL_SAL 
---------- ---------- ---------- 
     7369  800  28875 
     7499  1600  28875 
     7521  1250  28875 
     7566  2975  28875 
     7654  1250  28875 
     7698  2850  28875 
     7782  2450  28875 
     7788  3000  28875 
     7839  5000  28875 
     7844  1500  28875 
     7876  1100  28875 
     7900  800  28875 
     7902  3000  28875 
     7934  1300  28875 
2

你可以用这种方式您预期的结果:

SELECT Emp_id, Emp_name, Emp_Sal, (SELECT SUM(Emp_Sal) FROM Employee) AS TotalSalary 
FROM Employee; 

Working DEMO

在一个简单的方法储存的工资总和到一个变量,并连同使用SELECT *,

SELECT SUM(Emp_Sal) INTO @TotalSalary FROM Employee; 

SELECT *, @TotalSalary AS TotalSalary 
FROM Employee; 

Working DEMO

+0

如何在没有至少分组的情况下工作? –

+0

@方案我得到SUM值作为一个单独的列与SELECT,所以GROUP BY不需要为SUM。请检查[DEMO](http://rextester.com/NYWK40252) – Arulkumar

+0

这将为emp表中的每条记录生成一个常数值为totalsalry的列。我不认为这是有道理的。让我们看看OP的预期输出是什么。 – XING

相关问题