如何用单条SQL子查询查询tags表中最高频标签对应的发布用户userId
SQL问题解答
问题描述
查询tags表中出现次数最多的标签对应的所有发布用户(userId),要求用单条SQL通过子查询实现,不需要拆分多次查询。
对应表结构截图:
实现方案
单标签最高频次场景(符合你当前确认只有Getdvd一个最高频标签的情况)
内层子查询统计每个标签的出现次数,倒序排序后取第一条得到最高频标签,外层查询过滤所有关联该标签的用户ID并去重即可:
SELECT DISTINCT userId FROM tags WHERE tag = ( -- 子查询自动获取出现次数最多的标签 SELECT tag FROM tags GROUP BY tag ORDER BY COUNT(*) DESC LIMIT 1 );
兼容多标签并列最高频次场景
如果存在多个标签出现次数相同且都是最高的情况,可以用如下写法覆盖所有场景:
SELECT DISTINCT userId FROM tags WHERE tag IN ( -- 子查询筛选所有出现次数等于最高频次的标签 SELECT tag FROM tags GROUP BY tag HAVING COUNT(*) = ( -- 内层子查询计算所有标签的最高出现次数 SELECT MAX(tag_count) FROM ( SELECT COUNT(*) AS tag_count FROM tags GROUP BY tag ) AS count_tbl ) );
内容的提问来源于stack exchange,提问作者Baptiste Dellerie
相关产品推荐
相关产品推荐

