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

3 番目の列 (パーセント) でやりたいことは、合計 (実際) を合計の値で割り、パーセンテージを取得することです。しかし、その Percent 列については、Total Percent を取得する必要はありません。

合計値は 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 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 に答える