2012-08-29 3 views
1

는,이계산 비율

내가 질문에 실패 된 시간의 비율을 계산해야 벽을 날 운전하는 데 도움 수 있기를 바랍니다, 그러나 이것은으로 좁혀해야 지리적 영역 및 제품에 대한 질문이 제기되고 있습니다.

는 내가 가진 :

$CA002 = "(SELECT ROUND(100 * (SELECT count(CA002Result) from Data_Table where (CA002Result='Fail'))/count(CA002Result),2) from Data_Table) AS 'CA002 %'"; 

'작동'하지만 단지

내가 노력하고있어에 '전체'로 기록의 전체 집합에 대해 계산하는 : 또한

$CA001 = "(SELECT ROUND(100 * (SELECT count(CA001Result) from Data_Table where (CA001Result='Fail' AND Area ='$Area'))/count(CA001Result) from Data_Table WHERE (Area='$Area'),2) AS 'CA001 %'"; 

과 :

$CA001 = "(SELECT ROUND(100 * (SELECT count(CA001Result) from Data_Table where (CA001Result='Fail' AND Product='$product' AND Area='$Area'))  
    / count(CA001Result WHERE Product = '$product' AND Area='$Area'),2) from Data_Table) AS 'CA001 %'"; 

또한 시도하지만 MYSQL 구문 오류가 발생합니다.

$CA001 = "(SELECT ROUND(100 * (SELECT count(CA001Result) from Data_Table where (CA001Result='Fail'))/ (SELECT (count(CA001Result) from Data_Table WHERE (Area='$Area')),2) AS 'CA001 %')"; 

아무리 노력해도 오류가 발생하는 경우에만 놓을 필요가없는 부분을 해결할 수 없습니다.

은 아래 답변을 시도 :

$CA001 = "(SELECT 100 * SUM(IF(CA001Result='Fail', 1, 0))/COUNT(CA001Result) as 'CA001 %' WHERE Area='$Area')"; 

$CA002 = "(SELECT ROUND(100 * (SELECT count(CA002Result) from Data_Table where (CA002Result='Fail'))/count(CA002Result),2) from Data_Table) AS 'CA002 %'"; 

을하지만 오류로 아래 얻고있다 :

MySQL의 오류 : 당신은 당신의 SQL 구문에 오류가 있습니다; 올바른 문법에 대해 가까운 구문을 사용하는 MySQL 서버 버전에 해당하는 매뉴얼을 확인하십시오. '(SELECT ROUND (100 * (SELECT count (CA002Result) from Data_Table where (CA002Re'at line 1)

감사합니다. !

$CA001 ="ROUND ((SELECT 100 * SUM(IF(CA001Result='Fail', 1, 0))/COUNT(CA001Result) 
FROM Data_Table 
WHERE Area='$Area'),2) as 'CA001 %'"; 
도움을 너무 많이

감사

+0

당신은 당신의 테이블 구조를 포함해야한다. 또한 단어를 쉽게 읽을 수 있도록 검색어로 묶습니다. – Ariel

+0

테이블 구조는 각 레코드에 Pass 또는 Fail이 기록 된 Questions (CA001Result for Example)입니다. 여기에는 제품 열과 영역 열이 직원 열 이름과 함께 다른 열에 있습니다. 기본적으로 질문의 총 %를 (POST 값에서 선택한) 해당 제품에 대해 응답 한 해당 지역 (POST 값에서 선택한 사람)이 응답 한 수에 대해 실패했습니다. –

+0

왜()의 검색어를 배치하고 있습니까? - 저에게 그것이 예외의 원인이되는 것으로 보입니다. –

답변

2

SELECT 100 * SUM(IF(CA001Result='Fail', 1, 0))/COUNT(CA001Result) as 'CA002 %' 
FROM Data_Table 
WHERE '$product' AND Area='$Area' 
을 시도해보십시오 -

편집을 사용하여 금

+0

그냥 오류를 얻었으나 위의 질문을 편집하여 내가 무엇을 얻고 있는지 보여줍니다. –

+0

좋아요, 방금 쿼리에 FROM을 추가했습니다 (누락되었습니다). 기존 MySQL 데이터베이스에서 변형 된 쿼리를 시도했지만 제대로 작동하는 것으로 보입니다. –

+0

우수! 이제 올바르게 제품/영역을 선택했습니다. 단지 소수점 이하 2 자리로 반올림해야합니다. 위의 예와 비슷한 위치에 추가했지만 문법 오류가 발생했습니다. 내 문제를 일으키고 있었습니까, 어디에/어떻게 ROUND를 넣을 것을 조언 할 수 있습니까? –

0

는 난 단지 모델을 추측하고있어,하지만 당신은이 패턴을 시도해야합니다 :

SELECT 
    Area, 
    Product, 
    COUNT(*) as total, 
    SUM(CA002Result='Fail') as total_fail, 
    SUM(CA002Result='Fail')/COUNT(*) as 'CA002 %' 
FROM Data_Table 
GROUP BY Area, Product;