sql - 图书馆数据库
问题描述
在我的数据库中,我有五个表:books
、magazines
、customer
、reservation
、items_brrwd
。如果有人借书,数据将存储在item_brrwd
表中。我怎样才能得到借得最多的书?
我需要你的帮助。
这是我的数据库。
图书。
CREATE TABLE "M_5126582"."BOOKS"
( "B_ID" NUMBER(*,0) NOT NULL ENABLE,
"TITLE" VARCHAR2(45 BYTE) NOT NULL ENABLE,
"AUTHOR" VARCHAR2(45 BYTE) NOT NULL ENABLE,
"PUBLISHER" VARCHAR2(45 BYTE) NOT NULL ENABLE,
"YEAR" DATE NOT NULL ENABLE,
"GENRE" VARCHAR2(20 BYTE) NOT NULL ENABLE,
"NOPAGES" NUMBER(*,0) NOT NULL ENABLE,
CONSTRAINT "BOOKS_PK" PRIMARY KEY ("B_ID")
);
items_brrwd。
CREATE TABLE "M_5126582"."ITEM_BRRWD"
( "ITEMBORROWED_ID" NUMBER(*,0) NOT NULL ENABLE,
"CUSTOMER_ID" NUMBER(*,0) NOT NULL ENABLE,
"BOOK_ID" NUMBER(*,0),
"NUM_BOOK" NUMBER(*,0),
"MAGAZINE_ID" NUMBER(*,0),
"NUM_MAGAZINES" NUMBER(*,0),
"BRRWD_DATE" DATE,
"RETURN_DATE" DATE,
"EBOOK_DOWNLOAD_DATE" DATE,
CONSTRAINT "ITEM_BRRWD_PK" PRIMARY KEY ("ITEMBORROWED_ID")
);
顾客。
CREATE TABLE "M_5126582"."CUSTOMER"
( "CUSTOMERID" NUMBER(*,0) NOT NULL ENABLE,
"NAME" VARCHAR2(20 BYTE) NOT NULL ENABLE,
"ADDRESS" VARCHAR2(100 BYTE) NOT NULL ENABLE,
"ITEMNOBRRWD" NUMBER(*,0),
"REGISTRATIONDATE" DATE NOT NULL ENABLE,
"NUM_BOOKS" NUMBER(*,0),
"NUM_MAGAZINES" NUMBER(*,0),
CONSTRAINT "CUSTOMER_PK" PRIMARY KEY ("CUSTOMERID")) ;
杂志。
CREATE TABLE "M_5126582"."MAGAZINES"
( "M_ID" NUMBER(*,0) NOT NULL ENABLE,
"TITLE" VARCHAR2(45 BYTE) NOT NULL ENABLE,
"ISSUEDATE" DATE NOT NULL ENABLE,
CONSTRAINT "MAGAZINES_PK" PRIMARY KEY ("M_ID")
);
预订。
CREATE TABLE "M_5126582"."RESERVATION"
( "CUSTOMERID" NUMBER(*,0) NOT NULL ENABLE,
"ITEMID" NUMBER(*,0) NOT NULL ENABLE,
"NOINTHEQUEUE" NUMBER(*,0) NOT NULL ENABLE,
CONSTRAINT "RESERVATION_PK" PRIMARY KEY ("CUSTOMERID")
);
解决方案
没有测试过,但这可能有效。
这将找到借阅次数最多的书名。
SELECT
bk.TITLE,
COUNT(*) AS TotalBorrowed
FROM M_5126582.ITEM_BRRWD brrwd
JOIN M_5126582.BOOKS bk ON bk.B_ID = brrwd.BOOK_ID
GROUP BY bk.TITLE
ORDER BY COUNT(*) DESC
FETCH FIRST ROW ONLY
还是老款TOP n
SELECT *
FROM (
SELECT bk.TITLE,
COUNT(*) AS TotalBorrowed
FROM M_5126582.ITEM_BRRWD brrwd
JOIN M_5126582.BOOKS bk ON bk.B_ID = brrwd.BOOK_ID
GROUP BY bk.TITLE
ORDER BY COUNT(*) DESC
) q
WHERE ROWNUM <= 1
推荐阅读
- c++ - 如何使用 EC2 实例作为 API 服务器?当前使用 C++ lambda
- python - 使用请求库登录抓取程序时获取状态码 500。我不知道为什么会发生这种情况
- groovy - 将多个键值对添加到 groovy 映射
- powershell - 如何根据文件名中的搜索字符串创建文件夹并将文件移动到其中?
- c# - 使用Union时如何防止产生外层Select语句?
- r - 如何将时间延迟变量拟合到 R 中的数据?
- javascript - 从 axios 访问进度条的 progressEvent 值以在 React 中设置状态
- python - 以编程方式获取 pip 包的最后更新
- javascript - 是否可以在 NodeJS 中使用带有工作线程的服务?
- ros2 - 使用挂钟做除发布以外的事情