Mysql 如何显示员工详细信息以及所有员工的总和(sal)?

Mysql 如何显示员工详细信息以及所有员工的总和(sal)?,mysql,sql,oracle,oracle-sqldeveloper,informatica-powercenter,Mysql,Sql,Oracle,Oracle Sqldeveloper,Informatica Powercenter,是否可以使用SQL显示如下所示的员工详细信息 Emp_id, Emp_name, Emp_Sal, Sum(Emp_Sal) 注:此处Sum(Emp_Sal)是所有员工的总和。您可以通过以下方式获得预期结果: SELECT Emp_id, Emp_name, Emp_Sal, (SELECT SUM(Emp_Sal) FROM Employee) AS TotalSalary FROM Employee; 或 以一种简单的方式将工资总额存储到一个变量中,并与SELECT*, SELECT

是否可以使用SQL显示如下所示的员工详细信息

Emp_id, Emp_name, Emp_Sal, Sum(Emp_Sal)

注:此处
Sum(Emp_Sal)
是所有员工的总和。

您可以通过以下方式获得预期结果:

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

以一种简单的方式将工资总额存储到一个变量中,并与
SELECT*,

SELECT SUM(Emp_Sal) INTO @TotalSalary FROM Employee;

SELECT *, @TotalSalary AS TotalSalary
FROM Employee;

您可以通过以下方式获得预期结果:

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

以一种简单的方式将工资总额存储到一个变量中,并与
SELECT*,

SELECT SUM(Emp_Sal) INTO @TotalSalary FROM Employee;

SELECT *, @TotalSalary AS TotalSalary
FROM Employee;

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

下面的解决方案使用解析函数。注意windowing子句:它是空的,因为我们想要一个组(所有员工),所以没有“分区依据”,我们想要添加所有行,所以没有“排序依据”(默认情况下,这意味着所有行的顺序都是“相等”的,我们得到所有行的总和)

这样做的好处是只需遍历一次基表。在“标量子查询”方法中,表被读取两次。在这个简单的示例中,这可能并不重要,但在生产中,它可能会非常重要,因为表非常大

    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

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

下面的解决方案使用解析函数。注意windowing子句:它是空的,因为我们想要一个组(所有员工),所以没有“分区依据”,我们想要添加所有行,所以没有“排序依据”(默认情况下,这意味着所有行的顺序都是“相等”的,我们得到所有行的总和)

这样做的好处是只需遍历一次基表。在“标量子查询”方法中,表被读取两次。在这个简单的示例中,这可能并不重要,但在生产中,它可能会非常重要,因为表非常大

    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


总和(Emp_Sal)
是否适用于所有员工?员工个人的
Emp\u Sal
Sum(Emp\u Sal)
有何不同?是的。。我想显示所有员工的总sal…你能举一个你想要的输出的例子吗。就像我在一个表中有10条记录,我想显示每个记录的员工详细信息以及总工资…那么你想要工资的滚动总和吗?是不是所有员工的
总和(Emp\sal)
?员工个人的
Emp\u Sal
Sum(Emp\u Sal)
有何不同?是的。。我想显示所有员工的总sal……你能举一个你想要的输出的例子吗。就像我在一个表中有10条记录,我想显示每个记录的员工详细信息以及总工资……那么你想要工资的滚动总和吗?@Marios我用SELECT将
sum
值作为一个单独的列,因此,总和不需要GROUP BY。请检查此选项,这将为emp表中的每条记录生成一个具有常量值的总计列。我认为这没有道理。让我们看看OP的预期输出。正如我所看到的,要么就是他想要的,要么就是他英语说得不好:D@Raj_Te:OP在标题和评论中提到他想要所有员工salary@KishoreKumar:不客气。将来如果您发布任何问题,请添加一些示例数据和预期结果。它有助于人们理解您的确切问题并获得正确的响应。@Marios我使用SELECT将
SUM
值作为一个单独的列来获取,因此SUM不需要GROUP BY。请检查此选项,这将为emp表中的每条记录生成一个具有常量值的总计列。我认为这没有道理。让我们看看OP的预期输出。正如我所看到的,要么就是他想要的,要么就是他英语说得不好:D@Raj_Te:OP在标题和评论中提到他想要所有员工salary@KishoreKumar:不客气。将来如果您发布任何问题,请添加一些示例数据和预期结果。这有助于人们理解你的确切问题,并得到适当的回应。