1

我有这段代码,它总结了员工的小时数并使用汇总来获得总小时数:

SELECT IFNULL(users, 'Total') AS Employee, 
SUM(actual) AS Amount

FROM table1

WHERE name = "ProjectName"

GROUP BY users
WITH ROLLUP

Employee  |  Amount
    A     |   15
    B     |   10
    C     |   10
  Total   |   35

我想为我的第三列(百分比)做的是将总和(实际)除以总数的值以获得百分比。但是对于那个百分比列,我不需要得到总百分比。

总值不是恒定的,只有 35。

Employee  |  Amount | Percent
    A     |   15    |  42.85
    B     |   10    |  28.57
    C     |   10    |  28.57
  Total   |   35    |

我怎样才能做到这一点?这是 sqlfiddle:http ://sqlfiddle.com/#!2/4543b/5

4

3 回答 3

4

这可以按需要工作:

SET @project_name = 'ProjectName';

SELECT IFNULL(users, 'Total') AS Employee, SUM(actual) AS Amount,
    IF(ISNULL(users), '', TRUNCATE(SUM(actual) / sum_table.amount_sum * 100, 2)
    ) AS Percent
    FROM Table1
    INNER JOIN (
        SELECT SUM(actual) AS amount_sum
            FROM Table1
            WHERE name = @project_name
    ) AS sum_table
    WHERE name = @project_name
    GROUP BY users
    WITH ROLLUP;

演示@SQL 小提琴

于 2014-04-04T18:17:57.603 回答
1

也许最好将一项工作留给应用程序的逻辑层,但如果您绝对必须在数据层中执行此操作,那么您只需将查询与另一个查找总体总数的查询结合起来:

SELECT   IFNULL(users, 'Total') AS Employee,
         SUM(actual) AS Amount,
         SUM(actual)/t.Total AS Percent
FROM     Table1, (
           SELECT SUM(actual) AS Total
           FROM   Table1
           WHERE  name = 'ProjectName'
         ) t
WHERE    name = 'ProjectName'
GROUP BY users WITH ROLLUP
于 2014-04-04T18:11:41.047 回答
1
SELECT if(users is NULL,'Total',users) as Employee, sum(actual) as Amount,
(CASE 
WHEN users is not null THEN CAST(sum(actual)/sum.sumAmt * 100 as DECIMAL(10,2)) 
END) as Percent

FROM Table1, (SELECT sum(actual) as sumAmt FROM Table1
              WHERE name = 'ProjectName') sum

WHERE name = "ProjectName"

GROUP BY users
WITH ROLLUP

演示

于 2014-04-04T18:33:10.407 回答