2013-03-12 2 views
4

간단한 쿼리가 있습니다.SQL에서 가장 일반적인 값을 찾고 가장 높은 것부터 가장 낮은 것 (오름차순)으로 정렬

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 

성명별로 그룹을 편집 할 때도 계속 오류가 발생합니다.

모든 도움을 주시면 대단히 감사하겠습니다. 고맙습니다.

+0

"환자 당 ID"별로 가장 일반적인 진단 코드 또는 가장 일반적인 진단 코드는 무엇입니까? id 당 – Lamak

+0

이 내가 찾고있는 것이지만, 정교하게 생각해서 죄송합니다. – Supplement

+0

그리고 RDBMS (SQL Server, Oracle, Postgres, MySQL) 및 버전은 무엇을 사용하고 있습니까? 또한 일반적인 진단으로 정렬 된 모든 행이 필요하거나 id 및 patient_id 만 필요합니까? – Lamak

답변

8

충분히 집계되지 않은 것처럼 보입니다. GROUP의 각 필드는 집계 필드를 나타냅니다. 따라서 이드의 진단, 환자 별 진단, 진단 만 보여줍니다. 별로 도움이되지 않습니다.

는 가장 일반적인 진단 기간을 얻을뿐만 아니라 그룹에서 ID와 patient_id를 제거하려면 다음

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

모든 IDS에서 가장 일반적인 코드를 얻으려면 그룹에서 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 
+0

첫 번째 선택은 내가 원하는 것으로 보이지만 계산에 연결된 ID와 환자 ID가 표시되지 않습니다. 두 번째 대답은 모든 조건을 다시 지정하지만 CodeCount는 모두 1입니다. – Supplement

+0

환자 ID도 원하십니까? 그래서 이드를위한 가장 일반적인 진단 코드를 가진 모든 환자를보고 싶습니까? –

+0

네, 그 말이 맞습니다 ... 모든 환자 ID는 가장 일반적인 디아 코드와 그 코드와 관련된 카운트를 가지고 있습니다. – Supplement

관련 문제