0

我正在尝试生成一个 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;

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

4

2 回答 2

0

类似的东西

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
;
于 2013-06-24T14:48:28.530 回答
0

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

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

于 2013-06-24T15:06:56.883 回答