mysql如何使用datediff返回的列上的条件获取查询结果行的计数

mysql如何使用datediff返回的列上的条件获取查询结果行的计数,mysql,jasper-reports,pie-chart,datediff,Mysql,Jasper Reports,Pie Chart,Datediff,我在链接右侧使用的查询在左侧生成了这个结果。 请看 我对JasperReports和MySql还不熟悉。 我正在努力 统计尚未转介的嫌疑人/确认客户 5天内转介的客户数 花费5天以上时间获得转介的客户数。 我能够得到在5天内被转介的客户数量 SELECT COUNT(*) from (select p.patient_id, (CASE WHEN st.smear_result <> 'NEGATIVE' OR st.gxp_result='MTB+' THEN IF(DATED

我在链接右侧使用的查询在左侧生成了这个结果。 请看

我对JasperReports和MySql还不熟悉。 我正在努力

统计尚未转介的嫌疑人/确认客户 5天内转介的客户数 花费5天以上时间获得转介的客户数。 我能够得到在5天内被转介的客户数量

SELECT COUNT(*) from 
(select p.patient_id,

(CASE WHEN st.smear_result <> 'NEGATIVE' OR st.gxp_result='MTB+'
THEN IF(DATEDIFF(r.date_referred,MIN(st.date_smear_tested)) IS NULL,'N/A',(DATEDIFF(r.date_referred,MIN(st.date_smear_tested))))

ELSE
(CASE WHEN st.smear_result='NEGATIVE' OR st.gxp_result='MTB-'
THEN IF(DATEDIFF(r.date_referred,MAX(st.date_smear_tested)) IS NULL,'N/A',(DATEDIFF(r.date_referred,MAX(st.date_smear_tested))))

ELSE 'N/A' end )END) as days_taken,

IF(r.date_referred IS NULL,'N/A',r.date_referred) date_referred
from patient as p 
right outer join sputum_test as st on p.patient_id=st.patient_id 
right outer join referral as r on r.patient_id=st.patient_id

where p.suspected_by is not null and (p.patient_status='SUSPECT' or p.patient_status='CONFIRMED')

group by p.patient_id

having days_taken <=5) AS SUBQUERY;
以及花费5天以上时间获得转介的客户数量

SELECT COUNT(*) from 
(select p.patient_id,

(CASE WHEN st.smear_result <> 'NEGATIVE' OR st.gxp_result='MTB+'
THEN IF(DATEDIFF(r.date_referred,MIN(st.date_smear_tested)) IS NULL,'N/A',(DATEDIFF(r.date_referred,MIN(st.date_smear_tested))))

ELSE
(CASE WHEN st.smear_result='NEGATIVE' OR st.gxp_result='MTB-'
THEN IF(DATEDIFF(r.date_referred,MAX(st.date_smear_tested)) IS NULL,'N/A',(DATEDIFF(r.date_referred,MAX(st.date_smear_tested))))

ELSE 'N/A' end )END) as days_taken,

IF(r.date_referred IS NULL,'N/A',r.date_referred) date_referred
from patient as p 
right outer join sputum_test as st on p.patient_id=st.patient_id 
right outer join referral as r on r.patient_id=st.patient_id

where p.suspected_by is not null and (p.patient_status='SUSPECT' or p.patient_status='CONFIRMED')
group by p.patient_id
having days_taken > 5) AS SUBQUERY;
但我如何获得尚未转介的嫌疑犯/确认客户数量

我的计划是以某种方式将结果分为两列: 第1列:显示3个条件,第2列:显示它们旁边的行的总和


我将在iReport designer中传递解决方案查询,以制作3个条件的饼图作为标签,并显示每个切片的百分比。

类似的操作应该可以:

SELECT SUM(days_taken <= 5) AS within_5_days,
       SUM(days_taken > 5) AS more_than_5,
       SUM(days_taken IS NULL) as not_yet_referred
FROM (...) AS subquery

显然,子查询应该为未引用的客户端生成NULL,而不是原始子查询中的N/A。

我尝试了您的解决方案“N/A”在5天内被计入,并且给出了错误的计数。子查询没有生成“NULL”,我说您需要将子查询更改为返回NULL,而不是N/A。