我正在尝试根据最大访问次数显示1行。我的select子句中已经有一个count函数。
这是我已经拥有的代码:
select
pat.pat_id "pat id"
,DEP.DEPARTMENT_NAME "DEPT NAME"
,COUNT (DEP.DEPARTMENT_NAME) "VISITS BY DEPT"
FROM PAT_ENC PAT
JOIN CLARITY_DEP DEP ON PAT.DEPARTMENT_ID = DEP.DEPARTMENT_ID
GROUP BY PAT.PAT_ID
,DEP.DEPARTMENT_NAME
根据上面的代码,这是我当前的结果:
PAT ID DEPT NAME VISITS BY DEPT
Z116547 OPS PEDI REHAB OT 177
Z116547 SSH REHAB PT 85
Z116547 SSH REHAB SLP 62
Z130422 LIB WOUND CENTER 119
Z130422 WEY UROLOGY 1
Z130422 SSH AMBULATORY CARE 1
我正在尝试编写仅显示每个Pat ID拥有最大访问次数的行的代码。
我想要得到的结果是
PAT ID DEPT NAME VISITS BY DEPT
Z116547 OPS PEDI REHAB OT 177
Z130422 LIB WOUND CENTER 119
我知道我需要一个子查询,只是不确定它的外观和外观。谢谢。
答案 0 :(得分:0)
一种方法使用窗口函数:
SELECT pd.*
FROM (SELECT pat.pat_id, DEP.DEPARTMENT_NAME,
COUNT(*) as cnt,
ROW_NUMBER() OVER (PARTITION BY DEP.DEPARTMENT_NAME ORDER BY COUNT(*) DESC) as seqnum
FROM PAT_ENC PAT JOIN
CLARITY_DEP DEP
ON PAT.DEPARTMENT_ID = DEP.DEPARTMENT_ID
GROUP BY PAT.PAT_ID, DEP.DEPARTMENT_NAME
) pd
WHERE seqnum = 1;
请注意,我删除了您的列别名。不得不摆弄转义的列名只会使编写查询变得更加复杂。
答案 1 :(得分:0)
使用row-number()
select * from (select
pat.pat_id "pat id"
,DEP.DEPARTMENT_NAME "DEPT NAME"
,COUNT (DEP.DEPARTMENT_NAME) "VISITS BY DEPT",
row_number() over(partition by pat.pat_id order by COUNT (DEP.DEPARTMENT_NAME) desc ) as rn
FROM PAT_ENC PAT
JOIN CLARITY_DEP DEP ON PAT.DEPARTMENT_ID = DEP.DEPARTMENT_ID
GROUP BY PAT.PAT_ID
,DEP.DEPARTMENT_NAME
) a where a.rn=1