使用JOIN进行条件聚合?

时间:2016-04-18 11:40:27

标签: sql postgresql

我在Postgres 9.4工作。我有一张含有药物的表格如下:

bnf_code                     │ character varying(15)  │ not null
pills_per_day                │ double precision       │

例如,此表可能包含代码为04030201的药物,每天推荐的药片为4,代码为04030202的药物和每天2的推荐药片。

我还有一张包含处方数量的表格,上面有一张外键:

 code              │ character varying(15)   │ not null
 num_pills         │ double precision        │ not null
 processing_date   │ date                    │ not null
 practice_id       │ character varying(6)    │ not null
Foreign-key constraints:
    FOREIGN KEY (code) REFERENCES medications(bnf_code) DEFERRABLE INITIALLY DEFERRED

现在我需要确定从0403开始为所有代码规定的每日剂量。每日剂量定义为实际开出的药丸数量除以每天推荐的药丸数量。

我知道如何为上面的两个特定代码执行此操作:

SELECT  (SUM(num_pills) FILTER (WHERE code='04030201') / 4) +
        (SUM(num_pills) FILTER (WHERE code='04030202') / 2)
FROM    prescriptions

但那是因为我可以在每天的药片中硬编码。

对于从pills_per_day开始的所有代码,我可以将其扩展为相应的0403吗?可能有几百个,但如果可能的话,我更喜欢使用单个SQL查询。

1 个答案:

答案 0 :(得分:0)

我不确定这是不是你在找什么:

SELECT SUM(p.num_pills/r.pills_per_day)
FROM prescriptions p INNER join recommendations r 
    ON p.code = r.bnf_code
WHERE p.code Like '0403%'

我假设num_pills是处方药的数量,而pills_per_day是推荐的药丸数量。