【问题标题】:mysql get rollup valuemysql获取汇总值
【发布时间】:2025-12-18 15:50:01
【问题描述】:

我想问一下 mysql with rollup 只能获取 rollup 值,这是我的代码

SELECT tbldept.CodeDept AS Dept,
       SUM(CASE WHEN tblemp.Status = '1' THEN 1 ELSE 0 END) AS headcount,
       SUM(CASE WHEN tblemp.Status = '1' THEN 1 ELSE 0 END) * 144 AS RegHrsEst,
       CONCAT(ROUND(20), '%') AS TargetOT,
       round(SUM(CASE WHEN tblemp.Status = '1' THEN 1 ELSE 0 END) * 144 * 0.2) AS OTHrsBdgt
FROM tbldept
LEFT JOIN tblemp
    ON tbldept.CodeDept = tblemp.CodeDept AND
       tblemp.class = "DIR"
WHERE tbldept.CodeDept != 'FIN' AND
      tbldept.CodeDept != 'HRT' AND
      tbldept.CodeDept != 'ISD'
GROUP BY tbldept.CodeDept with ROLLUP;

汇总查询结果:

我怎样才能只获得汇总值?谢谢之前

【问题讨论】:

  • 你能告诉我们你想要的输出吗?
  • 嗨,蒂姆,我想得到像之前图片一样的输出。我想在 RollUP 中获取 value hitung, RegHrsEst,OTHrsBdgt 435, 62640, 12528 来总结其他值
  • 您向我们展示了 current 查询的输出,但是您的 expected 输出是什么?
  • 嗨,蒂姆,我只希望输出变为 Total |击球|注册时间 |目标OT | OTHrsBdgt 总计 | 435 | 62640 | 20% | 12528 |然后上面的 Total 想在我输入时对其他值求和

标签: mysql rollup


【解决方案1】:

如果你只想要rollup的行,只需使用having

SELECT tbldept.CodeDept AS Dept,
       SUM(CASE WHEN tblemp.Status = '1' THEN 1 ELSE 0 END) AS headcount,
       SUM(CASE WHEN tblemp.Status = '1' THEN 1 ELSE 0 END) * 144 AS RegHrsEst,
       CONCAT(ROUND(20), '%') AS TargetOT,
       round(SUM(CASE WHEN tblemp.Status = '1' THEN 1 ELSE 0 END) * 144 * 0.2) AS OTHrsBdgt
FROM tbldept
LEFT JOIN tblemp
    ON tbldept.CodeDept = tblemp.CodeDept AND
       tblemp.class = "DIR"
WHERE tbldept.CodeDept != 'FIN' AND
      tbldept.CodeDept != 'HRT' AND
      tbldept.CodeDept != 'ISD'
GROUP BY tbldept.CodeDept with ROLLUP
HAVING Dept IS NULL;

编辑:

having应该可以了,看看有没有其他原因。

或者只是用子查询包装你的查询:

SELECT *
FROM (
    SELECT tbldept.CodeDept AS Dept,
           SUM(CASE WHEN tblemp.Status = '1' THEN 1 ELSE 0 END) AS headcount,
           SUM(CASE WHEN tblemp.Status = '1' THEN 1 ELSE 0 END) * 144 AS RegHrsEst,
           CONCAT(ROUND(20), '%') AS TargetOT,
           round(SUM(CASE WHEN tblemp.Status = '1' THEN 1 ELSE 0 END) * 144 * 0.2) AS OTHrsBdgt
    FROM tbldept
    LEFT JOIN tblemp
        ON tbldept.CodeDept = tblemp.CodeDept AND
           tblemp.class = "DIR"
    WHERE tbldept.CodeDept != 'FIN' AND
          tbldept.CodeDept != 'HRT' AND
          tbldept.CodeDept != 'ISD'
    GROUP BY tbldept.CodeDept with ROLLUP
) t
WHERE Dept IS NULL;

【讨论】:

  • 嗨转发,结果显示我空白。我现在才试试,有什么建议吗?
  • @MasHarjo 更新了我的答案,请再次检查。
  • 嗨@forward,谢谢你的好答案。对不起我的粗心