Sql 具有特定值的计数列
我希望在下面的查询中计算患者全名准时赴约的时间百分比。理论上,我可以计算出时间值的多少倍,以及延迟的多少倍,然后将延迟乘以时间,再乘以100得到百分比,但我无法计算出将计算结果显示在一列中,然后根据患者的准时分数百分比对患者进行分组所需的合成度 查询示例:Sql 具有特定值的计数列,sql,Sql,我希望在下面的查询中计算患者全名准时赴约的时间百分比。理论上,我可以计算出时间值的多少倍,以及延迟的多少倍,然后将延迟乘以时间,再乘以100得到百分比,但我无法计算出将计算结果显示在一列中,然后根据患者的准时分数百分比对患者进行分组所需的合成度 查询示例: SELECT Db.Full_Name, CASE WHEN (Db.DOCTOR_APPOINTMENT_DATE - Db.ARRIVE_DOCTOR_DATE) + (Db.DOCTOR_APPOINTMENT_TIME - Db.
SELECT
Db.Full_Name,
CASE WHEN (Db.DOCTOR_APPOINTMENT_DATE - Db.ARRIVE_DOCTOR_DATE) + (Db.DOCTOR_APPOINTMENT_TIME - Db.ARRIVE_DOCTOR_TIME) < 0 THEN 'LATE' ELSE 'ON-TIME' END AS STATUS,
FROM Db
WHERE Db.DOCTOR_APPOINTMENT_DATE between to_date('10/30/2018','MM/DD/YYYY') and to_date ('12/30/2018','mm/dd/yyyy')
我希望它能做什么:
Full_Name: % on time:
John Brown 75%
James White 25%
John Smith 66%
谢谢你的时间 您可以为此使用聚合,尤其是平均值:
sum案例陈述在这里很有效。您只需在每次医生/患者准时时进行计数和相加。然后你需要知道所有约会的总和才能得到准确的百分比。我不会对单行使用平均值
用你正在使用的数据库标记你的问题。我认为这是我需要的正确方向,但我认为我在GROUPBY子句中遇到了错误。
Full_Name: % on time:
John Brown 75%
James White 25%
John Smith 66%
SELECT Db.Full_Name,
AVG(CASE WHEN (Db.DOCTOR_APPOINTMENT_DATE - Db.ARRIVE_DOCTOR_DATE) + (Db.DOCTOR_APPOINTMENT_TIME - Db.ARRIVE_DOCTOR_TIME) < 0
THEN 1.0 ELSE 0.0
END) as late_ratio
FROM Db
WHERE Db.DOCTOR_APPOINTMENT_DATE BETWEEN DATE '2018-10-30 AND DATE '2018-12-30'
GROUP BY db.Full_Name
SELECT
Db.Full_Name,
SUM(
CASE WHEN (Db.DOCTOR_APPOINTMENT_DATE - Db.ARRIVE_DOCTOR_DATE) +
(Db.DOCTOR_APPOINTMENT_TIME - Db.ARRIVE_DOCTOR_TIME) < 0 THEN 0 ELSE 1 END
) AS OnTimeCount
--*********************************************
-- insert logic to count the total appointments and divide.**
, count(somefield) as AppointmentCount
--******************************
-- loose example ---
, ( OnTimeCount / Cast(AppointmentCount as float)) * 100 as OnTimeRatio
FROM Db
WHERE Db.DOCTOR_APPOINTMENT_DATE between to_date('10/30/2018','MM/DD/YYYY') and to_date ('12/30/2018','mm/dd/yyyy')