MySQL如何查询拒绝最多活动邀约好友并处理并列创建合规视图
解决方案
方案1:兼容MySQL 5.x版本(无用户变量,可直接封装为视图)
直接将最小邀约数的计算逻辑作为内联子查询嵌入筛选条件,不需要依赖用户变量,符合MySQL视图的创建要求:
DROP VIEW IF EXISTS troublemaker; CREATE VIEW troublemaker AS SELECT DISTINCT f.FIRST_NAME, f.LAST_NAME FROM FRIEND f INNER JOIN PROPOSES p ON f.FRIEND_ID = p.FRIEND_ID GROUP BY f.FRIEND_ID, f.FIRST_NAME, f.LAST_NAME HAVING COUNT(*) = ( SELECT MIN(cnt) FROM ( SELECT COUNT(*) cnt FROM PROPOSES GROUP BY FRIEND_ID ) t ) ORDER BY f.FRIEND_ID ASC;
方案2:MySQL 8.0+版本(窗口函数实现,性能更优)
如果你的MySQL版本为8.0及以上,使用RANK()窗口函数实现逻辑更简洁,查询效率更高:
DROP VIEW IF EXISTS troublemaker; CREATE VIEW troublemaker AS SELECT FIRST_NAME, LAST_NAME FROM ( SELECT f.FIRST_NAME, f.LAST_NAME, f.FRIEND_ID, RANK() OVER(ORDER BY COUNT(*) ASC) AS rk FROM FRIEND f INNER JOIN PROPOSES p ON f.FRIEND_ID = p.FRIEND_ID GROUP BY f.FRIEND_ID, f.FIRST_NAME, f.LAST_NAME ) t WHERE rk = 1 ORDER BY FRIEND_ID ASC;
以上两种方案均无需使用用户变量,完全符合MySQL视图的创建规范,且能正确返回所有并列符合条件的好友
内容的提问来源于stack exchange,提问作者Vico Lays
相关产品推荐
相关产品推荐

