2016-04-18 23 views
0

私はPostgres 9.4で作業しています。JOINによる条件付き集計?

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

日あたりの錠剤をたとえば、このテーブルは、4日あたりの推奨薬と、04030201のコードを持つ薬が含まれている場合があり、およびコード04030202と1および推奨:次のように私は、薬を含むテーブルを持っています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 

今私は投与量は、すべてのコードのために処方されたどのように多くの毎日のワークアウトする必要がありますstarti ng 0403。 1日用量は、実際に処方された錠剤の数を1日あたりの推奨される錠剤で割ったものとして定義される。

私は上記の2つの特定のコードのためにこれを行う方法を知っている:

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

しかし、私は一日のフィールドあたりの錠剤でハードコーディングできるためです。

私は0403を開始するすべてのコードのために適切なpills_per_dayで除算し、これを拡張することができますか?可能であれば、数百もあるかもしれませんが、私は単一のSQLクエリを使用したいと考えています。

答えて

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が推奨薬の数であると仮定しています。

+1

私はそれが簡単だとは信じられません!本当にありがとう :) – Richard