2012-08-28 79 views
0

希望能帮到你,这是推动我逼疯了计算MySQL查询使用变量

我需要计算的时间问题已经失败的百分比,但这需要由地理区域范围缩小,而这些问题的产品正被要求反对。

我:

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

,无论我尝试什么,我都会得到错误,但我似乎无法弄清楚我需要放在哪里。

任何伟大的apprteciated,thankyou。

+0

你能告诉我们你正在计算什么LY?像表格名称和列... – Diamondo25

+0

@ Diamondo25 CA001Result是问题'答案'栏,在每条记录中都有合格或不合格。产品是从一个POST变量中选择的,与Area一样。所有列都在Data_Table中。我基本上试图说(例如)西方地区在被问到苹果问题时56%的问题没有通过(CA001)。对不起,我只能真正用莱曼术语来写这些术语。 –

+0

事实上,如果您显示数据样本和预期结果,情况会更好。 –

回答

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 

//通过面积过滤器,产品

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 

希望这有助于