如何编写SQL查询,按姓名分组优先显示借书数量为1的用户记录
解法1:窗口函数方案(兼容所有支持窗口函数的主流数据库,如MySQL 8.0+、PostgreSQL、SQL Server、Oracle等)
核心逻辑是对每个用户的记录按书籍数量倒序排序,取每个用户排序第一的记录即可满足优先级要求:
SELECT Name, `No.of book` FROM ( SELECT Name, `No.of book`, -- 按用户分组,组内按书籍数量倒序排序,编号1就是优先级最高的记录 ROW_NUMBER() OVER (PARTITION BY Name ORDER BY `No.of book` DESC) AS rank_num FROM TableA ) AS temp_table WHERE rank_num = 1;
解法2:分组聚合方案(兼容所有关系型数据库,包括不支持窗口函数的低版本数据库如MySQL 5.x)
由于你的需求中优先级1>0刚好和数值大小顺序一致,直接取每个用户的最大书籍数量即可得到目标结果,写法更简洁:
SELECT Name, MAX(`No.of book`) AS `No.of book` FROM TableA GROUP BY Name;
注意:字段名
No.of book包含特殊符号,SQL中需要用标识符转义符包裹,MySQL用反引号`,SQL Server用方括号[],Oracle用双引号"",根据你使用的数据库调整即可。
内容的提问来源于stack exchange,提问作者user3616392
相关产品推荐
相关产品推荐

