「病床の機能別分類」を境界点に従って区分する
いきなり何のこと?
病床の機能別分類は、国が(かなりいい加減に使っていた)高度急性期・急性期・回復期・慢性期の定義付けです。
ちゃんとした数字で指標を作らないと、統計も取れませんからね。
紹介記事はこちらを参考にしてください。
該当記事によれば、日別の出来高点数を見て、
- C1 3000点以上 高度急性期
- C2 600点以上 急性期
- C3 225点以上 回復期
- それ以下 慢性期
と分けるようです。
「リハビリテーション料の一部を除く」とあるのが気になりますが、ひとまず大雑把にリハビリを除外してしまいましょう。
さくっとSQLを書くとこんな感じです。
一日あたり点数を出すSQL
SELECT データ識別番号,入院年月日,実施年月日,SUM(出来高実績点数*行為回数) AS 出来高総点数 FROM efile WHERE データ区分 < 90 AND データ区分 <> 70 group by データ識別番号,入院年月日,実施年月日
以上終了です、ありがとうございました…
というのはあんまりですね。これからエクセルで集計しろ、というのでしょうか。
もう少しSQL側で何とか出来ないか考えてみましょう。
CASE式で区分を組み込む
SELECT データ識別番号,入院年月日,実施年月日,SUM(出来高実績点数*行為回数) AS 出来高総点数, CASE WHEN SUM(出来高実績点数*行為回数) > 2999 THEN '高度急性期' WHEN SUM(出来高実績点数*行為回数) > 599 AND SUM(出来高実績点数*行為回数) < 3000 THEN '急性期' WHEN SUM(出来高実績点数*行為回数) > 224 AND SUM(出来高実績点数*行為回数) < 600 THEN '回復期' ELSE '慢性期' END AS class FROM efile WHERE データ区分 < 90 AND データ区分 <> 70 group by データ識別番号,入院年月日,実施年月日
いきなり面倒になりました。
とはいえ、やっていることはそんなに複雑ではありません。
CASE式は、この場合ですとclass
というカラムを定義します。
(END AS class
のところで名前を決めています)
あとは、わりと見ての通りです。出来高点数の合計と、最初に上げたC1~C3の区分を比較して、分類の振り分けを行っているだけです。
さて、これで区分がつきましたので、あとはピボットテーブルで…
クエリ全体をSELECTする
それも面倒くさいわ!そもそもエクセル触りたくない!
という方のためのクエリです。
クエリ全体をAS fooという感じで名付けてやり、それに大してSELECTしてみましょう。
こんな感じになります。
SELECT count(sum.データ識別番号),sum.class FROM ( SELECT データ識別番号,入院年月日,実施年月日,SUM(出来高実績点数*行為回数) AS 出来高総点数, CASE WHEN SUM(出来高実績点数*行為回数) > 2999 THEN '高度急性期' WHEN SUM(出来高実績点数*行為回数) > 599 AND SUM(出来高実績点数*行為回数) < 3000 THEN '急性期' WHEN SUM(出来高実績点数*行為回数) > 224 AND SUM(出来高実績点数*行為回数) < 600 THEN '回復期' ELSE '慢性期' END AS class FROM efile WHERE データ区分 < 90 AND データ区分 <> 70 group by データ識別番号,入院年月日,実施年月日) AS sum group by sum.class
ここまで来ると、正直おぞましい気がしますが、追加したのはSELECT count(sum.データ識別番号),sum.classFROM ( 〜 group by sum.class
の部分だけです。
結果は、区分別の患者延件数になります。
お好みで、診療科や病棟を追加してやれば、診療科別・病棟別のデータもすぐに作れて便利です。
このようにCASE式は便利ですので、ちょっとした分析にどうぞ。
(ある程度複雑になったら、さっさとPandasに移行するのがオススメですが…)