Я работаю в 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-запрос, если это возможно.
Не могу поверить, что все так просто! Спасибо :) – Richard