Oracle SQL同一查询实现Count、Avg等多统计需求可行性问询
问题解答
完全可行,用单个Oracle SQL查询就能实现所有需求,以下是具体实现代码:
SELECT PATIENT_ID, MAX(Session_Date) AS last_session_date, AVG(TRUNC(PATIENT_Paid_Date) - TRUNC(Session_Date)) AS avg_days_between_pay_and_session, MAX(Amount) AS max_amount, COUNT(CASE WHEN Session_Status = 'Completed' THEN 1 END) AS completed_session_count FROM PATIENT_SESSIONS GROUP BY PATIENT_ID;
代码说明:
MAX(Session_Date):直接提取每个患者的最晚会话日期,也就是最后一次session的日期。AVG(TRUNC(PATIENT_Paid_Date) - TRUNC(Session_Date)):通过TRUNC截断日期的时间部分(如果字段包含时间的话),计算付款日期与会话日期的天数差后取平均值;若日期字段不带时间,可直接去掉TRUNC进行日期相减。MAX(Amount):获取每个患者所有会话中的最高金额。COUNT(CASE WHEN Session_Status = 'Completed' THEN 1 END):通过条件计数统计状态为Completed的会话数量,不符合条件的记录会返回NULL,而COUNT函数会自动忽略NULL值,刚好满足需求。
内容的提问来源于stack exchange,提问作者user13768246
相关产品推荐
相关产品推荐

