4

簡単なクエリがあります。

    select id, patient_id, diagnosis from dbo.diabetes_rx_tracker

group by id, patient_id, diagnosis

最も一般的な診断コードは、リストの一番上に表示される必要があります。

カウント機能を使ってみました。

ただし、加算する代わりに、各患者のすべての値を 1 として返します。

select id, patient_id, count(diagnosis) from dbo.diabetes_rx_tracker

group by id, patient_id, diagnosis

また、group by ステートメントを編集するときにエラーをスローし続けました。

どんな助けでも大歓迎です。ありがとうございました。

4

1 に答える 1

9

これは、十分に集約していないようです。GROUP by の各フィールドは、他のフィールドと合計して集計するフィールドを表します。したがって、これはID別、患者別、診断別の診断のみを表示します。あまり役に立ちません。

最も一般的な診断期間を取得するには、グループ化から id と patient_id も削除します。

select
  count(diagnosis)
from dbo.diabetes_rx_tracker 
group by 
  diagnosis 
order by 
  count(diagnosis) desc

すべての ID で最も一般的なコードを取得するには、グループ化から patient_id を削除して、次を選択します。

select
  diagnosis, 
  id, 
  count(1) as CodeCount 
from dbo.diabetes_rx_tracker 
group by 
  diagnosis, 
  id 
order by 
  count(diagnosis) desc

更新: あなたの新しい基準に基づいて、これはあなたが望むものです.

select 
  id, 
  diagnosis, 
  ct 
from (
    select 
      row_number() OVER (PARTITION BY id ORDER BY count(diagnosis) desc ) as rn, 
      count(diagnosis) as ct, 
      diagnosis, 
      id
    from dbo.diabetes_rx_tracker 
    group by 
      id, 
      diagnosis
    ) ranked
where 
  rn = 1
order by
  CT desc
于 2013-03-12T18:41:56.500 に答える