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

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

我有两个表,其创建和填充方式如下:

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',然后说出其对应的标题“书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
2个回答
2
投票

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

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上再进行一次扫描,因此,这实际上比第一种解决方案效率低。


0
投票

您可以在GROUP BY子句之后添加:

ORDER BY numCopies DESCLIMIT 1;

查询将从最大到最小排序。将结果限制为1,您将获得MAX值。

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