mysql - 如何通过分组计算多行的百分比

标签 mysql sum multiple-columns percentage

对于我们的一些工单的解决率,我想计算解决工单相对于同月内相同类型工单总数的百分比 我能够获得已解决的票证数量,但我缺少同一类型和同一个月的所有票证总数,因此始终为 0% 或 100%。 问题=我如何累计票证数量,以便计算每月已解决票证的百分比、类型、状态?

我按时间分组,输入“AND”状态(请参阅下面的查询)。所以总数总是被状态的分组所否决。 我尝试过:累积、汇总、枢轴、联合

    SELECT date_format(st.createdDate,'%Y%m') createdAt,
       count(st.id) COUNT,
                    st.typeId,
                    st.status,
                    sum(st.status2) status2,
                    sum(st.notStatus2) notStatus2,
                    ((sum(st.status2)/sum(st.status2)+sum(st.notStatus2))*100) AS pct
FROM
  (SELECT t.id,
          t.added createdDate,
          t.type_id typeId,
          tt.name ticketType,
          t.status,
          if(t.status=2,1,0) AS status2,
          if(t.status!=2,1,0) AS notStatus2,
          datediff(closed,added) doorloopTijdDgn
   FROM tickets t
   JOIN ticket_types tt ON tt.id=t.type_id
   WHERE added BETWEEN '2018-07-01' AND '2019-07-01' ) AS st #singletickets
GROUP BY createdAt,
         ticketType,
         status;

对于前两行 (type=62),我预计 37 个已解决的票证中有 33 个 = 89.2%
所以pct的“sum(st.status2)+sum(st.notStatus2)”应该是37

现在我得到:

createdAt  count  typeId  status  status2 notStatus2  pct
   201807     33      62       2       33          0  100.0000
   201807      4      62       6        0          4  NULL
   201807     31      38       2       31          0  100.0000
   201807      3      38       6        0          3  NULL
   201807     15      12       2       15          0  100.0000
   201807     11      11       2       11          0  100.0000
   201807      1      48       2        1          0  100.0000
   201807     19      30       2       19          0  100.0000
   201807      5       9       2       5           0  100.0000
   201807     12      33       2       12          0  100.0000
   201807      1      52       2        1          0  100.0000
   201807      2      45       2        2          0  100.0000
   201807     41      58       2       41          0  100.0000
   201807      3      58       6        0          3  NULL
   201807      1      41       6        0          1  NULL
   201807      1      13       2        1          0  100.0000
   201807     35      66       2       35          0  100.0000
   201807      8      20       2        8          0  100.0000
   201807      1      20       4        0          1  NULL
   201807      5      10       2        5          0  100.0000
   201807     12      68       2       12          0  100.0000
   201807      1      65       2        1          0  100.0000
   201807     20       7       2       20          0  100.0000
   201807      2      19       2        2          0  100.0000
   201807      4      43       2        4          0  100.0000
   201807      3      34       2        3          0  100.0000
   201807     24      67       2       24          0  100.0000
   201807     43      46       2       43          0  100.0000
   201807      1      46       6        0          1  NULL

我想要什么:

createdAt  count  typeId  status  status2 notStatus2  pct
   201807     33      62       2       33          0  89.2000
   201807      4      62       6        0          4  0
   201807     31      38       2       31          0  93.9000
   201807      3      38       6        0          3  0
   201807     15      12       2       15          0  100.0000
   201807     11      11       2       11          0  100.0000
   201807      1      48       2        1          0  100.0000
   201807     19      30       2       19          0  100.0000
   201807      5       9       2       5           0  100.0000
   201807     12      33       2       12          0  100.0000
   201807      1      52       2        1          0  100.0000
   201807      2      45       2        2          0  100.0000
   201807     41      58       2       41          0  93.2000
   201807      3      58       6        0          3  0
   201807      1      41       6        0          1  0
   201807      1      13       2        1          0  100.0000
   201807     35      66       2       35          0  100.0000
   201807      8      20       2        8          0  88.8000
   201807      1      20       4        0          1  0

我有 mysql 5.7.12 可以使用

最佳答案

看来你错了()

应该是

((sum(st.status2)/(sum(st.status2)+sum(st.notStatus2)))*100) as pct

关于mysql - 如何通过分组计算多行的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57431145/

相关文章:

mysql - Asterisk 与 MySQL

c# - c# 使用 linq 对数据表中的多列进行分组

HTML 创建包含图像和文本的 3 列

python - 如何对 pandas 数据帧的多列上的逻辑运算符进行向量化?

Mysql 从 LEFT OUTER JOIN 中排除记录

mysql - 使用仅包含外键的单个表查询从 3 个表获取数据

c# - 如何在列表框中存储空值c#

MySQL 选择列总和相等的行

mysql - 将 SQL 中的列值相乘,然后将所有值相加 - Laravel 4

sum - 如何在 SAS 中对按产品和年份分组的值求和?