【问题标题】:Calculate Percentage in MySQL Query计算 MySQL 查询中的百分比
【发布时间】:2013-06-24 23:21:20
【问题描述】:

我正在尝试生成一个 MySQL 表,其中包含一个列,该列显示与具有相同分组的另一个计数相对应的百分比。总的来说,我想将以下两个查询组合成一个,而不是显示一个计数,而是显示一个百分比。这是两个查询:

SELECT machine, COUNT(machine)
FROM rtcdb.session
WHERE project = "CSC032"
  AND (qc_gsr = 'green'
    AND qc_hr = 'green'
    AND qc_acz = 'green'
    AND qc_bre = 'green'
  )
GROUP BY machine;

&

SELECT machine, COUNT(machine)
FROM rtcdb.session
WHERE project = "CSC032"
GROUP BY machine;

在某些情况下,第一个查询生成的行数少于第二个查询 - 当有机器根本没有任何成功(绿色)时会发生这种情况。我如何将这些查询组合成一个计算成功的所有机器的百分比(本质上是成功率),并将其显示在自己的列中?

【问题讨论】:

    标签: mysql count percentage


    【解决方案1】:

    类似的东西

    SELECT
      machine
    , COUNT(DISTINCT machine) AS "nb"
    , COUNT(DISTINCT
        IF(qc_gsr = "green"
       AND qc_hr = "green"
       AND qc_acz = "green"
       AND qc_bre = "green"
        ), machine, NULL)
      ) AS "green_nb"
    , COUNT(DISTINCT
        IF(qc_gsr = "green"
       AND qc_hr = "green"
       AND qc_acz = "green"
       AND qc_bre = "green"
        ), machine, NULL)
      ) / COUNT(machine) * 100 AS "%"
    FROM rtcdb.session
    WHERE project = "CSC032"
    GROUP BY machine
    ;
    

    【讨论】:

    • 感谢您的帮助,非常感谢。您编写的查询使我朝着正确的方向前进,但不幸的是计算了不准确的值(我不确定其原因)。似乎您的查询产生的百分比比实际应该高得多。例如,其中一台机器的 green_nb 计数不是 2,而是 11,这是该机器的总数。似乎 green_nb 计数得出的数字始终等于或略小于总计数。有什么想法吗?
    • 也许你应该使用DISTINCT。但我不明白的是,如果你计算machine 并按machine 分组,它应该总是返回1。你能提供一个SQLFiddle 吗?
    • 我想通了!这就是我现在拥有的:
    • SELECT machine , COUNT( IF("green" IN (qc_gsr) AND "green" in (qc_hr) AND "green" in (qc_acz) AND "green" in (qc_bre), machine, NULL ) ) AS "green_nb" , COUNT(machine) AS "nb" , COUNT( IF("green" IN (qc_gsr) AND "green" in (qc_hr) AND "green" in (qc_acz) AND "green" in (qc_bre) ), machine, NULL) ) / COUNT(machine) * 100 AS "%" FROM rtcdb.session WHERE project = "CSC032" GROUP BY machine;
    • 好吧,其实你可以用=代替IN。查看我的更新答案
    【解决方案2】:

    为了让您了解该技术,另一种方法是将现有查询用作子查询,如下所示(未测试):

    select machine, total.count, green.count, green.count*100/total.count as percentage
      from (<subquery1>) green, (<subquery2>) total right join by green.machine=total.machine`
    

    您需要在子查询中将 count(machine) 别名为 count

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 2014-04-06
      • 2012-05-01
      • 1970-01-01
      • 2013-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多