0

あなたが助けてくれることを願っています、これは私を壁に追いやっています

質問が失敗した回数の割合を計算する必要がありますが、これは、地理的領域と、これらの質問が求められている製品によって絞り込む必要があります。

私は持っている :

$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 %'";

何を試してもエラーが発生するだけです。どこに何を配置する必要があるのか​​\u200b\u200bわかりません。

大変感謝しております。

4

1 に答える 1

1

これを試して

//エリアでフィルタリング

create table t( id int,  answer varchar(10),Area varchar(10));
insert into t select 1  ,  'pass' , 'Area1';
insert into t select 2  ,  'pass' , 'Area1';
insert into t select 3  ,  'fail' , 'Area1';
insert into t select 4  ,  'fail' , 'Area1';
insert into t select 5  ,  'fail' , 'Area1';
insert into t select 6 ,   'fail' , 'Area2';

SELECT 
        (x.TotalFailedAnswerRecord * 100) /y.TotalRecord AS Fail_percent
FROM
            (   SELECT Area,TotalFailedAnswerRecord = COUNT(answer) 
                FROM t 
                WHERE answer='fail' AND Area = 'Area1' 
                GROUP BY Area
            )x
INNER JOIN
            (   SELECT Area,TotalRecord = COUNT(answer) 
                FROM t 
                WHERE Area = 'Area1'
                GROUP BY Area
            )y ON x.Area =y.Area

//Result
Fail_percent
-------------
60

// Area、Productでフィルタリング

create table t( id int,  answer varchar(10),Area varchar(10),Product varchar(10));
insert into t select 1  ,  'pass' , 'Area1' ,'Product1';
insert into t select 2  ,  'fail' , 'Area1' ,'Product1';
insert into t select 3  ,  'fail' , 'Area1' ,'Product1';
insert into t select 4  ,  'fail' , 'Area1' ,'Product1';
insert into t select 5  ,  'fail' , 'Area1' ,'Product2';
insert into t select 6 ,   'fail' , 'Area2' ,'Product2';

SELECT 
        (x.TotalFailedAnswerRecord * 100) /y.TotalRecord AS Fail_percent
FROM
            (   SELECT Area,Product,TotalFailedAnswerRecord = COUNT(answer) 
                FROM t 
                WHERE answer='fail' AND Area = 'Area1' AND Product = 'Product1' 
                GROUP BY Area,Product
            )x
INNER JOIN
            (   SELECT Area,Product,TotalRecord = COUNT(answer) 
                FROM t 
                WHERE Area = 'Area1' AND Product = 'Product1'
                GROUP BY Area,Product
            )y ON x.Area =y.Area AND x.Product = y.Product

//Result
Fail_percent
-------------
75

お役に立てれば

于 2012-08-30T04:29:20.773 に答える