You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

医院数据库SQL查询:找出使用频率与年龄比值最高的设备

解决思路:计算设备使用频率与年龄的最高比值

我来帮你完善这个查询,要实现“找出使用频率与自身年龄比值最高的设备”这个需求,我们需要把设备的使用次数和它的服役年龄关联起来计算,具体可以这样做:

完整SQL查询语句

SELECT 
    e.id AS equipment_id,
    e.model,
    COUNT(DISTINCT ar.appointment_id) AS usage_frequency,
    TIMESTAMPDIFF(YEAR, e.release_date, CURDATE()) AS equipment_age,
    -- 计算比值,用NULLIF避免年龄为0时的除以0错误
    COUNT(DISTINCT ar.appointment_id) / NULLIF(TIMESTAMPDIFF(YEAR, e.release_date, CURDATE()), 0) AS usage_age_ratio
FROM 
    equipment e
LEFT JOIN 
    appointmentrelations ar ON e.id = ar.equipment_id
GROUP BY 
    e.id, e.model, e.release_date
ORDER BY 
    usage_age_ratio DESC
LIMIT 1;

逐部分解释

  1. 关联两张表:用LEFT JOIN把equipment和appointmentrelations通过设备ID关联,确保即使设备从未被使用过也能被统计(如果只需要统计有过使用记录的设备,换成INNER JOIN即可)。
  2. 统计使用频率:沿用你之前的COUNT(DISTINCT ar.appointment_id),统计每个设备被不同预约使用的次数。
  3. 计算设备年龄:用TIMESTAMPDIFF(YEAR, e.release_date, CURDATE())计算设备从发布到当前的服役年数(这个函数适用于MySQL;如果是PostgreSQL,可替换为EXTRACT(YEAR FROM AGE(CURRENT_DATE, release_date)))。
  4. 计算比值:用使用频率除以设备年龄,NULLIF(..., 0)是为了避免设备刚发布(年龄为0)时出现除以0的报错,此时比值会返回NULL,不会干扰排序。
  5. 排序取最高值:按比值降序排序,LIMIT 1直接取出比值最高的设备。

结合示例数据验证

用你提供的示例数据计算:

  • e1:使用频率1,年龄20年,比值=1/20=0.05
  • e2:使用频率2,年龄7年,比值≈2/7≈0.2857
  • e3:使用频率2,年龄9年,比值≈2/9≈0.2222

最终排序后e2的比值最高,和示例预期结果一致。

内容的提问来源于stack exchange,提问作者S.John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:40:59