简体   繁体   English

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

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

I am trying to display 1 row based off the maximum number of visits. 我正在尝试根据最大访问次数显示1行。 I already have a count function in my select clause. 我的select子句中已经有一个count函数。

This is what I already have for code: 这是我已经拥有的代码:

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

Based on the code above here are my current results: 根据上面的代码,这是我当前的结果:

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

I'm trying to write code that will only display the row that has the maximum number of visits for each Pat ID. 我正在尝试编写仅显示每个Pat ID具有最大访问次数的行的代码。

The results I am trying to get is 我想要得到的结果是

PAT ID  DEPT NAME           VISITS BY DEPT
Z116547 OPS PEDI REHAB OT   177
Z130422 LIB WOUND CENTER    119

I know I need a sub query, just not sure where and how it should look. 我知道我需要一个子查询,只是不确定在哪里以及应该如何看。 Thanks. 谢谢。

One method uses window functions: 一种方法使用窗口函数:

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;

Note that I removed your column aliases. 请注意,我删除了您的列别名。 Having to fiddle around with escaping column names just makes it more complicated to write queries. 不得不摆弄转义的列名只会使编写查询变得更加复杂。

use row-number() 使用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