2016-04-18 2 views
0

Я работаю в Postgres 9.4. У меня есть таблица, содержащая лекарства, следующим образом:Условное агрегирование с помощью JOIN?

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 

Теперь мне нужно работать, сколько ежедневно дозы были назначены для всех кодов ЗАПУСК ng 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-запрос, если это возможно.

ответ

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

Смежные вопросы