我有两个表,其创建和填充方式如下:
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;
如果您想让本书拥有最多的副本,则可以加入,订购并限制:
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
上再进行一次扫描,因此,这实际上比第一种解决方案效率低。
您可以在GROUP BY子句之后添加:
ORDER BY numCopies DESCLIMIT 1;
查询将从最大到最小排序。将结果限制为1,您将获得MAX值。