无需MAX查询或降序输出,获取对应最多去重学者的研究方向
解决方法:统计唯一学者数并获取Top研究兴趣
嘿,你的思路方向是对的,问题出在统计学者数量的时候没做去重处理!原SQL里的count(*)会把同一个acnum关联的多条descrip记录都算进去,而我们需要的是每个descrip对应的唯一学者数。
直接修改你的SQL,把count(*)换成count(distinct acnum)就可以解决重复统计的问题了,完整语句如下:
SELECT x.descrip, x.unique_scholar_count FROM ( SELECT u.descrip, COUNT(DISTINCT u.acnum) AS unique_scholar_count, RANK() OVER (ORDER BY COUNT(DISTINCT u.acnum) DESC) AS rank FROM interest u WHERE u.descrip IS NOT NULL GROUP BY u.descrip ) x WHERE x.rank = 1;
关键说明:
COUNT(DISTINCT u.acnum):确保每个学者(唯一acnum)只被统计一次,不管他关联了多少次同一个descrip- 用
RANK()函数可以自动给研究兴趣按学者数量排序,最后筛选rank=1就能得到拥有最多学者的研究兴趣(如果有多个descrip学者数相同且都是最多,会一起返回) - 整个过程没有用MAX函数,也不需要对最终结果做降序输出,完全符合你的要求
内容的提问来源于stack exchange,提问作者user24529
相关产品推荐
相关产品推荐

