2013-06-24 146 views
0

我正在尝试生成一个MySQL表,其中包含一列显示一个计数与另一个计数相同的百分比。总体而言,我想将以下两个查询合并为一个显示百分比而不是显示计数的查询。下面是这两个疑问:计算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

类似的东西

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 
; 
+0

感谢您的帮助,真的很感激。您所写的查询将我置于正确的方向,但不幸的是计算出不准确的值(我不确定的原因)。看起来你的查询正在产生比实际应该高得多的百分比。例如,与其中一台机器的green_nb计数相比,它提出了11,这是该机器的总计数。看起来green_nb的数字会出现一个总数等于或略低于总数的数字。有任何想法吗? – jakelaz

+0

也许你应该使用'DISTINCT'。但是我不明白的是,如果你通过'machine'来计算'machine'和group,它应该总是返回1.你能提供一个[SQLFiddle](http://sqlfiddle.com/)吗? –

+0

我想通了!这是我现在有: – jakelaz

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