我正在尝试生成一个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;
在某些情况下,第一个查询将产生的行数少于第二个查询 - 当有机器根本没有任何成功(绿色)时会发生这种情况。我如何将这些查询组合成一个计算所有成功机器的百分比(基本上是成功率)的查询,并将其显示在自己的列中?
答案 0 :(得分: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
;
答案 1 :(得分: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
。