2013-06-24 4 views
0

Я пытаюсь создать таблицу MySQL, содержащую столбец, отображающий процент, соответствующий одному счету над другим с той же группировкой. В общем, я хочу объединить следующие два запроса в один, который вместо отображения счета отображает процент. Вот два запроса:Вычислить проценты в MySQL Query

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

Благодарим вас за помощь, очень цените это. Запрос, который вы написали, ставит меня в правильном направлении, но, к сожалению, вычисляет неточные значения (причина которых я не уверен). Кажется, ваш запрос производит гораздо больший процент, чем тот, который на самом деле должен быть. Например, вместо того, чтобы придумать 2 для подсчета green_nb для одной из машин, он набирает 11, что является общим количеством этой машины. Кажется, что счетчик green_nb подходит к числу, которое последовательно равно или немного меньше общего счета. Есть идеи? – jakelaz

+0

Возможно, вы должны использовать 'DISTINCT'. Но я не понимаю, что если вы считаете 'machine' и group' machine', он всегда должен возвращать 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 в подзапросах.

Смежные вопросы