显示最频繁的字符串
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()
.
我有一个医院数据集,每个病人都被诊断入院。 我想显示每个患者一次,并显示每个患者最多次入院的诊断。 现在每个有多个诊断的患者出现在多行中。
数据集与此类似
$ 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()
.