3

count()aと threeを返すはずのクエリを書いていますavg()。正常にcount()動作しますが、avg()関数は誤った結果を返しています。私が扱っているデータは次のようになります。

MD Name |    PT | Med Staff | LOS | DRG Bench | LOS - Bench
MCP     | 12345 | Ortho SX  |  5  |    4      |       1
MCP     | 25879 | Ortho SX  |  3  |    5      |      -2
MCP     | 98556 | Ortho SX  |  4  |    5      |      -1
... 

私の望ましい出力は次のとおりです。

MD Name | # PT | Med Staff | Avg LOS | Avg DRG Bench | AVG LOS - Bench
MCP     |   3  | Ortho SX  |    4    |       4.66    |       0

平均の結果が正しくありません。特に次のようなケースが 1 つあります。

MD Name | LOS    | Bench  | LOS - Bench
MCP     | 2.0000 | 1.8000 |    0.2000
MCP     | 1.0000 | 1.7000 |   -0.7000
MCP     | 25.0000| 4.9000 |   20.1000
MCP     | 4.0000 | 2.2000 |    1.8000

AVG LOS では 8.000000 ではなく 9.000000 を取得しています。AVG Bench では 2.65 ではなく 2.780000 を取得しています。LOS-Bench では 5.35 ではなく 6.220000 を取得しています。これらは大きな違いであり、小数点以下 2 桁まで正確でなければなりません。 .

これが私が使用しているSQL、SQL Server 2008です

DECLARE @STARTDATE DATETIME
DECLARE @ENDATE DATETIME

SET @STARTDATE = '2013-05-01'
SET @ENDATE = '2013-05-31'

SELECT DISTINCT pv.pract_rpt_name AS 'PHYSICIAN'
, COUNT(DISTINCT vr.pt_id) AS '# PTS' 
--, pv.spclty_desc AS 'SPECIALTY'
, pv.med_staff_dept AS 'MED STAFF'
, AVG(vr.len_of_stay) AS 'LOS'
, AVG(vr.drg_std_days_stay) AS 'DRG LOS BENCH'
, AVG(vr.len_of_stay - vr.drg_std_days_stay) AS 'LOS - DRG BENCH'

FROM smsmir.vst_rpt vr
LEFT OUTER JOIN smsmir.pyr_plan pp <-- removed and fixed
ON vr.pt_id = pp.pt_id <-- removed and fixed
JOIN smsdss.pract_dim_v pv
ON vr.adm_pract_no = pv.src_pract_no

WHERE vr.adm_dtime BETWEEN @STARTDATE AND @ENDATE
AND vr.vst_type_cd = 'I'
AND pv.spclty_desc != 'NO DESCRIPTION'
--AND pv.spclty_desc NOT LIKE 'HOSPITALIST%'
AND vr.drg_std_days_stay IS NOT NULL
AND pv.pract_rpt_name != '?'
AND pv.orgz_cd = 's0x0'
AND pv.med_staff_dept IN (
'INTERNAL MEDICINE',
'FAMILY PRACTICE',
'SURGERY'
)
GROUP BY pv.pract_rpt_name, pv.med_staff_dept
ORDER BY pv.med_staff_dept, AVG(vr.len_of_stay - vr.drg_std_days_stay)DESC

お時間とご尽力いただきありがとうございます。

4

2 に答える 2

1

クエリに含まれる OUTER JOIN は、AVG 関数が処理する行数に影響を与える可能性があります。必要ない場合 (そして、そのテーブルがクエリの他の場所で参照されている場所が見つからない場合) は、削除してみてください。

于 2013-07-02T13:23:45.090 に答える