2017-04-05 120 views
1

我需要在MariaDB中编写一个SQL查询来打印汇总值汇总行之间的报表。mariadb SQL查询显示汇总值汇总行

例如在EMP表中的数据是:

EmpName ROLE   SALARY 
A   Manager  10000 
B   operator  8000 
C   operator  8500 
D   GM   20000 
E   Manager  9000 

我需要一个像输出:

ROLE  EmpName SALARY 
Manager A   10000 
      E   9000 
TOTAL     19000 
---------------------------- 
GM   D   20000 
TOTAL     20000 
---------------------------- 
operator B   8000 
      C   8500 
TOTAL     16500 

提前非常感谢。

+1

这类操作通常由应用程序的表示层进行。 –

+0

只需要写一个sql。例如在Oracle中有“计算”命令 – arvind

回答

1

尝试ROLLUP修饰符使用, -

SELECT 
    role, empname, SUM(salary) 
FROM 
    table1 
GROUP BY 
    role, empname WITH ROLLUP; 

输出:

GM  D  20000 
GM  (null) 20000 
Manager A  10000 
Manager E  9000 
Manager (null) 19000 
operator B  8000 
operator C  8500 
operator (null) 16500 
(null) (null) 55500 

分组列的所有NULL值都是总值。最后一行是所有工资的总价值。

GROUP BY WITH ROLLUP修饰符文档。

+0

感谢这工作,我想用“WITH ROLLUP”是在MariaDB中编写这种查询的最佳方式 – arvind

2

下面的查询可产生类似于一个你想要的输出:例如

SELECT IF(type = 1, ROLE, 'TOTAL'), SALARY 
FROM (
    SELECT ROLE, SALARY, 1 AS type 
    FROM mytable 

    UNION ALL 

    SELECT ROLE, SUM(SALARY) AS TotalSalary, 2 AS type 
    FROM mytable 
    GROUP BY ROLE) AS t 
ORDER BY ROLE, type 

Demo here

+0

谢谢,这是工作 – arvind