You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle环境下查询借阅量最高的单本及多本图书的SQL方案

嘿,我来帮你搞定这两个Oracle SQL查询需求,先把两种语言的表结构对应清楚,再一步步给出解决方案~

表结构对应

西班牙语表结构

Socio(codigo, apellido_nombre, direccion, telefono, fecha_alt)
Libro(codigo, titulo_libro, tema)
Prestamos(codigoSocio, codigoLibro)

英语表结构

Member(code, last_name, first_name, address, telephone, date_alt)
Book(code, title_book, subject)
Loans(codeMember, codeBook)
SQL解决方案

下面针对英语表结构(Loans表)给出查询,西语版本只需要把Loans换成Prestamos,codeBook换成codigoLibro即可,我会在每个方案后提一下西语的替换方式。

1. 查询借阅量最高的所有图书(1本及以上,含并列)

你提供的基础SQL已经完成了分组和排序,但还没筛选出借阅量最高的那些。这里有两种常用实现方式:

方式一:使用窗口函数(推荐,简洁高效)

利用Oracle的RANK()窗口函数,直接标记出借阅量排名第一的图书,并列的会被同时选中:

SELECT codeBook, borrow_count
FROM (
    SELECT codeBook, 
           COUNT(*) AS borrow_count,
           RANK() OVER (ORDER BY COUNT(*) DESC) AS rnk
    FROM Loans
    GROUP BY codeBook
)
WHERE rnk = 1;

西语版本替换:把Loans改为Prestamos,codeBook改为codigoLibro,borrow_count可以换成prestamo_count便于理解

方式二:子查询嵌套

先计算所有图书的借阅量,再找出最大值,最后筛选借阅量等于最大值的图书:

SELECT codeBook, COUNT(*) AS borrow_count
FROM Loans
GROUP BY codeBook
HAVING COUNT(*) = (
    SELECT MAX(borrow_num)
    FROM (
        SELECT COUNT(*) AS borrow_num
        FROM Loans
        GROUP BY codeBook
    )
);

西语版本替换规则同上

2. 查询借阅量最高的单本图书(仅返回1本,即使有并列)

如果只需要返回其中一本(不管有没有并列),可以根据Oracle版本选择不同写法:

方式一:Oracle 12c及以上版本(简洁写法)

使用FETCH FIRST 1 ROW ONLY直接获取排序后的第一行:

SELECT codeBook, COUNT(*) AS borrow_count
FROM Loans
GROUP BY codeBook
ORDER BY COUNT(*) DESC
FETCH FIRST 1 ROW ONLY;

方式二:低版本Oracle(兼容写法)

通过子查询排序后,用ROWNUM筛选第一行:

SELECT codeBook, borrow_count
FROM (
    SELECT codeBook, COUNT(*) AS borrow_count
    FROM Loans
    GROUP BY codeBook
    ORDER BY COUNT(*) DESC
)
WHERE ROWNUM = 1;

西语版本替换规则同上

内容的提问来源于stack exchange,提问作者wallcroft

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:40:01