显示最频繁的字符串

display most frequent string

我有一个医院数据集,每个病人都被诊断入院。 我想显示每个患者一次,并显示每个患者最多次入院的诊断。 现在每个有多个诊断的患者出现在多行中。

数据集与此类似

$ Subject_id    diagnosis
 1112          SEIZURE
 1112          GASTROINTESTINAL BLEED
 1112          SEIZURE
 1113          FEVER

如何将多个诊断折叠并显示到一行并按最常用的诊断显示?

您可以使用 window 函数和聚合:

select sd.*
from (select subject_id, diagnosis, count(*) as cnt,
             row_number() over (partition by subject_id order by count(*) desc) as seqnum
      from t
      group by subject_d, diagnosis
     ) sd
where seqnum = 1;

注:如果最常见的诊断有并列,这里任意returns排一列。如果您希望所有行都出现平局,请使用 rank() 而不是 row_number().