我如何选择最大值和相应的标题?

问题描述 投票:0回答:1

我有两个表,像这样创建并填充

create table booklist(title varchar(20), bookid char(2) PRIMARY KEY);
create table numberofcopies (bookid char(2) FOREIGN KEY REFERENCES booklist(bookid), numcopies int);

insert into booklist VALUES ('book 1', 1), ('book 2', 2);
insert into numberofcopies VALUES (1, 5), (2, 10);

[我想做的是从id#2获取最大值,在这种情况下为'10',然后说出它对应的标题“ book 2”。我的查询返回的是所有书籍的列表,而不仅仅是具有最大值的书籍。我将如何去做呢?到目前为止,我的SQL查询:

SELECT MAX(numCopies), title AS Title
FROM numberofcopies JOIN booklist ON numberofcopies.bookid=booklist.bookid
GROUP BY Title;
sql sql-server tsql group-by greatest-n-per-group
1个回答
1
投票

如果您想让本书拥有最多的副本,则可以加入,订购并限制:

select top (1) bl.*, noc.numcopies
from booklist bl
inner join numberofcopies noc on noc.bookid = bl.bookid
order by noc.numcopies desc

如果要允许平局,可以改用top (1) with ties


Edit:如果do想要max(),一种方法是加入,然后使用相关的子查询进行过滤,该子查询从numcopies中获得最大的numberofcopies

select bl.*, noc.numberofcopies
from booklist bl
inner join numberofcopies noc on noc.bookid = bl.bookid
where noc.numcopies = (select max(numcopies) from numberofcopies)

请注意,这需要在numberofcopies上再进行一次扫描,因此,这实际上比第一种解决方案效率低。

© www.soinside.com 2019 - 2024. All rights reserved.