mysql - 如何跳过MySQL中的特定列进行汇总

标签 mysql rollup

我有一个查询,并且我已使用 with rollup 来制作报告。现在我需要跳过要汇总的列,我不需要像以下查询中的 part 这样的额外摘要行

SELECT coalesce(K.ShipName,'Grand Total')ShipName, K.AREA_ID, coalesce(K.PostingName,'Ship Total')PostingName, coalesce(K.Branch,'Unit Total')Branch, coalesce(K.RANK_NAME,'Branch Total')RANK_NAME , K.Part, ifnull(sum(K.Borne),0)Borne, ifnull(sum(K.sanction),0)sanction, sum(K.TotalIn)TotalIn, sum(K.TotalOut)TotalOut
FROM (
      SELECT ShipName, AREA_ID, PostingName,Branch, RANK_NAME, ifnull(Part,'') Part, Borne, sanction, TotalIn, TotalOut
      FROM (
            SELECT sh.NAME ShipName,sh.AREA_ID, pu.NAME PostingName, b.BRANCH_NAME Branch, r.RANK_NAME , p.Name Part, COUNT(SAILORID)Borne,
            (SELECT SUM(us.SanctionNo)sanction FROM unitwisesanction us WHERE us.RankID = s.RANKID AND us.PostingUnitID = s.POSTINGUNITID
            AND us.PartIIID = s.FIRSTPARTID GROUP BY us.PostingUnitID,us.RankID,us.PartIIID) sanction,

            (SELECT COUNT(t.TransferID)TotalOut FROM transfer t LEFT JOIN sailor ts ON t.SailorID = ts.SAILORID WHERE ts.RANKID = s.RANKID
            AND ts.FIRSTPARTID = s.FIRSTPARTID AND t.PostingUnitID = s.POSTINGUNITID )TotalIn,

            (SELECT COUNT(t.TransferID)TotalOut FROM transfer t LEFT JOIN sailor ts ON t.SailorID = ts.SAILORID WHERE ts.RANKID = s.RANKID
            AND ts.FIRSTPARTID = s.FIRSTPARTID AND ts.POSTINGUNITID = s.POSTINGUNITID )TotalOut

            FROM sailor s
            LEFT JOIN bn_branch b ON s.BRANCHID = b.BRANCH_ID
            LEFT JOIN bn_rank r ON s.RANKID = r.RANK_ID
            LEFT JOIN partii p ON s.FIRSTPARTID = p.PartIIID
            LEFT JOIN bn_daogroup a ON b.DAO_GROUPID = a.GROUP_ID
            LEFT JOIN bn_ship_establishment sh ON s.SHIPESTABLISHMENTID = sh.SHIP_ESTABLISHMENTID
            LEFT JOIN bn_posting_unit pu ON s.POSTINGUNITID = pu.POSTING_UNITID
            WHERE SAILORSTATUS = 1 AND s.ZONEID IN (1) AND s.SHIPESTABLISHMENTID IN (53,125) AND a.GROUP_ID IN (1,2,3,4,5,7)
            GROUP BY s.POSTINGUNITID, RANKID, FIRSTPARTID) a
  ) K
GROUP BY ShipName, PostingName, Branch, RANK_NAME, Part WITH ROLLUP
HAVING Part IS NOT NULL OR RANK_NAME IS NULL

确切地说,我不需要以下屏幕截图中的颜色标记记录

screenshot

有人可以帮助我吗?

最佳答案

我已经通过使用以下查询解决了这个问题

SELECT coalesce(K.ShipName,'Area Total')ShipName, K.AREA_ID, coalesce(K.PostingName,'Ship Total')PostingName, coalesce(K.Branch,'Unit Total')Branch, coalesce(K.RANK_NAME,'Branch Total')RANK_NAME , K.Part, sum(K.Borne)Borne, sum(K.sanction)sanction, sum(K.TotalIn)TotalIn, sum(K.TotalOut)TotalOut
FROM (
      SELECT ShipName, AREA_ID, PostingName,Branch, RANK_NAME, ifnull(Part,'') Part, Borne, sanction, TotalIn, TotalOut
      FROM (
            SELECT sh.NAME ShipName,sh.AREA_ID, pu.NAME PostingName, b.BRANCH_NAME Branch, r.RANK_NAME , p.Name Part, COUNT(SAILORID)Borne,
            (SELECT SUM(us.SanctionNo)sanction FROM unitwisesanction us WHERE us.RankID = s.RANKID AND us.PostingUnitID = s.POSTINGUNITID
            AND us.PartIIID = s.FIRSTPARTID GROUP BY us.PostingUnitID,us.RankID,us.PartIIID) sanction,

            (SELECT COUNT(t.TransferID)TotalOut FROM transfer t LEFT JOIN sailor ts ON t.SailorID = ts.SAILORID WHERE ts.RANKID = s.RANKID
            AND ts.FIRSTPARTID = s.FIRSTPARTID AND t.PostingUnitID = s.POSTINGUNITID )TotalIn,

            (SELECT COUNT(t.TransferID)TotalOut FROM transfer t LEFT JOIN sailor ts ON t.SailorID = ts.SAILORID WHERE ts.RANKID = s.RANKID
            AND ts.FIRSTPARTID = s.FIRSTPARTID AND ts.POSTINGUNITID = s.POSTINGUNITID )TotalOut

            FROM sailor s
            LEFT JOIN bn_branch b ON s.BRANCHID = b.BRANCH_ID
            LEFT JOIN bn_rank r ON s.RANKID = r.RANK_ID
            LEFT JOIN partii p ON s.FIRSTPARTID = p.PartIIID
            LEFT JOIN bn_daogroup a ON b.DAO_GROUPID = a.GROUP_ID
            LEFT JOIN bn_ship_establishment sh ON s.SHIPESTABLISHMENTID = sh.SHIP_ESTABLISHMENTID
            LEFT JOIN bn_posting_unit pu ON s.POSTINGUNITID = pu.POSTING_UNITID
            WHERE SAILORSTATUS = 1 AND s.ZONEID IN (1) AND s.SHIPESTABLISHMENTID IN (53,125) AND a.GROUP_ID IN (1,2,3,4,5,7)
            GROUP BY s.POSTINGUNITID, RANKID, FIRSTPARTID) a
  ) K
GROUP BY ShipName, PostingName, Branch, RANK_NAME, Part WITH ROLLUP
HAVING Part IS NOT NULL OR RANK_NAME IS NULL

关于mysql - 如何跳过MySQL中的特定列进行汇总,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55438690/

相关文章:

mysql - 空表导致所有 SELECT 字段均为 NULL

storybook - 如何在汇总包中最好地包含 scss 文件中引用的 Assets (图像和字体)

javascript - 汇总未生成 typescript 源图

postgresql - Postgres 如何实现 CUBE-、ROLLUP- 和 GROUPING SETS 运算符

php - 在本地计算机上使用 phpMyAdmin 上传 MySQL 数据库时出现问题

mysql - 计数总和 MySQL

MySQL 触发前性能问题

mysql - 如何在laravel中生成唯一的序列号

vue.js - 如何在 Vue.js 中保留自定义组件标签名称

mysql - 汇总多个选择并加入