2017-09-06 54 views
0

以前我使用Ajax绘制一个谷歌图表(饼图),图表可以显示,因为它只涉及2列。如何使SQL查询获得特定列的总和?

现在,我想画一个这样的柱状图。

column chart

这是我的SQL查询:

$sql = "Select count(application_id) as count, application_status, category_group from mdl_local_jobs_application 
inner join mdl_local_jobs_job on mdl_local_jobs_application.application_jobid = mdl_local_jobs_job.job_id 
left join mdl_local_jobs_category on mdl_local_jobs_job.job_categoryid = mdl_local_jobs_category.category_id 
left join mdl_cohort_members on mdl_local_jobs_application.application_applicantid = mdl_cohort_members.userid 
left join mdl_local_cohortrole on mdl_cohort_members.cohortid = mdl_local_cohortrole.cohortid 
left join mdl_role on mdl_local_cohortrole.roleid = mdl_role.id where shortname = 'graduates' 
group by application_status, category_group"; 

查询被编码成JSON输出使用此:

$result_rows = mysql_num_rows($query); 
$row_num = 0; 

//loop fetching the query into json format 
while ($result = mysql_fetch_array($query)) 
{ 
$row_num++; 
if ($row_num == $result_rows){ 
    echo "{\"c\":[{\"v\":\"" . $result['category_group'] . "\",\"f\":null},{\"v\":\"" . $result['application_status'] . "\",\"f\":null},{\"v\":" . $result['count'] . ",\"f\":null}]},"; 
} else { 
    echo "{\"c\":[{\"v\":\"" . $result['category_group'] . "\",\"f\":null},{\"v\":\"" . $result['application_status'] . "\",\"f\":null},{\"v\":" . $result['count'] . ",\"f\":null}]},"; 
} 
} 


echo " ] }"; 

这是输出:

{ "cols": [ {"id":"","label":"CATEOGRY","pattern":"","type":"string"}, {"id":"","label":"CATEOGRY","pattern":"","type":"number"}, {"id":"","label":"TOTAL","pattern":"","type":"number"} ], "rows": [ {"c":[{"v":"Accounting/Finance","f":null},{"v":"0","f":null},{"v":2,"f":null}]},{"c":[{"v":"Engineering","f":null},{"v":"0","f":null},{"v":1,"f":null}]}, ] } 

但是,图表显示不正确,因为应用程序状态的值不是数字。我在其他解决方案上阅读,以获得sql函数中的sum函数的结果,但我不知道该怎么做。

我的问题:我要怎么做SQL查询来获取的每个应用程序的状态总计数(0,1,2 - 状态类型)

我的预期输出是这样的:

{ "cols": [ {"id":"","label":"CATEOGRY","pattern":"","type":"string"}, {"id":"","label":"CATEOGRY","pattern":"","type":"number"}, {"id":"","label":"TOTAL","pattern":"","type":"number"} ], "rows": [ {"c":[{"v":"Accounting/Finance","f":null},{"v":4,"f":null},{"v":2,"f":null}]},{"c":[{"v":"Engineering","f":null},{"v":7,"f":null},{"v":1,"f":null}]}, ] } 

不同之处在于第二个数组值,我希望通过使SQL Query(使用sum函数)获得0状态,1状态和2状态的每个状态的计算总和。

{"c":[{"v":"Accounting/Finance","f":null},{"v":4,"f":null},{"v":2,"f":null}]}, 

如果我有这样的查询(在声明的变化,我只能得到的状态数“0”而已。我怎么想添加在同一查询另一个WHERE语句得到的其他状态计数

$sql = "Select count(application_id) as count, category_group from mdl_local_jobs_application 
inner join mdl_local_jobs_job on mdl_local_jobs_application.application_jobid = mdl_local_jobs_job.job_id 
left join mdl_local_jobs_category on mdl_local_jobs_job.job_categoryid = mdl_local_jobs_category.category_id 
left join mdl_cohort_members on mdl_local_jobs_application.application_applicantid = mdl_cohort_members.userid 
left join mdl_local_cohortrole on mdl_cohort_members.cohortid = mdl_local_cohortrole.cohortid 
left join mdl_role on mdl_local_cohortrole.roleid = mdl_role.id where shortname = 'graduates' and application_status = 0 
group by category_group"; 
+0

你能添加预期的输出吗?我不能得到你的问题 – Alex

+0

你不用'count'来得到它吗? – Oleg

+0

为了您的理解,我已经编辑了我的问题。 @Oleg,count是每个类别的总应用程序,但它重复状态“0”.--> {“v”:“Accounting/Finance”,“f”:null},{“v”:“0 “ ”F“:空},{ ”v“:2, ”F“:空}]},{ ”C“:[{ ”v“: ”技术“, ”F“:空},{” v “:”0“,”f“:null},{”v“:1,”f“:null}]} – joun

回答

0

我想这个SQL查询,状态为 “1” 和状态 “2”:

$sql = "Select count(application_id) as count, sum(case when application_status = 0 then 1 else 0 end) PendingCount, sum(case when application_status = 1 then 1 else 0 end) RejectedCount, sum(case when application_status = 2 then 1 else 0 end)SuccessCount, category_group from mdl_local_jobs_application 
inner join mdl_local_jobs_job on mdl_local_jobs_application.application_jobid = mdl_local_jobs_job.job_id 
left join mdl_local_jobs_category on mdl_local_jobs_job.job_categoryid = mdl_local_jobs_category.category_id 
left join mdl_cohort_members on mdl_local_jobs_application.application_applicantid = mdl_cohort_members.userid 
left join mdl_local_cohortrole on mdl_cohort_members.cohortid = mdl_local_cohortrole.cohortid 
left join mdl_role on mdl_local_cohortrole.roleid = mdl_role.id where shortname = 'graduates' 
group by category_group"; 

这是输出:

{ "cols": [ {"id":"","label":"CATEOGRY","pattern":"","type":"string"}, {"id":"","label":"PENDING","pattern":"","type":"number"}, {"id":"","label":"REJECTED","pattern":"","type":"number"}, {"id":"","label":"SUCCESS","pattern":"","type":"number"}, {"id":"","label":"TOTAL","pattern":"","type":"number"} ], "rows": [ {"c":[{"v":"Accounting/Finance","f":null},{"v":2,"f":null},{"v":0,"f":null}, {"v":0,"f":null},{"v":2,"f":null}]},{"c":[{"v":"Engineering","f":null},{"v":1,"f":null},{"v":0,"f":null}, {"v":0,"f":null},{"v":1,"f":null}]}, ] } 

图表可以根据状态类型出现..

不管怎么说,谢谢@Alex,@Oleg的评论和分享让我离开的问题。我很抱歉让你对我的问题感到困惑。