簡體   English   中英

根據select中的count列返回最大行

[英]return a max row based off a count column in select

我正在嘗試根據最大訪問次數顯示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

我知道我需要一個子查詢,只是不確定在哪里以及應該如何看。 謝謝。

一種方法使用窗口函數:

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;

請注意,我刪除了您的列別名。 不得不擺弄轉義的列名只會使編寫查詢變得更加復雜。

使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM