统计,在sql中求每个部门的数据比值

问题遇到的现象和发生背景

在做统计的时候想直接计算每个部门中物品数量和所有部门中的物品数量的比值,但是使用group中使用sum肯定是只能计算分组后的数据。不能计算出所有列的总数。不知道有什么好办法实现,俺不才,只能想出暴力方法。

问题相关代码
SELECT
    *,
    total / num 
FROM
    (
    SELECT
        sd.depart_name,
        sum( d.stock ) AS total
        1 AS n 
    FROM
        depart d
        LEFT JOIN sys_depart sd ON d.depart_id = sd.id
    WHERE
        d.is_delete = 0 
    GROUP BY
        d.depart_id 
    ) AS n
    LEFT JOIN ( SELECT 1 AS n, sum( stock ) AS num FROM depart ) AS b ON n.n = b.n

此处是先计算出所有部门的物品总数,并设置固定id ‘n’ 然后查询分组后的部门物品数量,设置id ‘n’,再在外面进行外连接查询,根据两个视图的数据进行连接。将每个数据上都加上所有部门物品数量总和数据去求比值。
运行结果

img

你可以使用rollup修饰group by可以达到多出一条全聚合的记录,比值的话取这条记录挺麻烦的你酌情考虑下,group by xxx with rollup
如果你是MySQL至少需要8.0才支持