Select SQL 服务器中 JOIN(2 个表)一本书的最高价格?
Select MAX price of a book with JOIN (2 tables) in SQL Server?
我有2张桌子
CREATE TABLE BOOKS
(
numbk INT PRIMARY KEY IDENTITY,
nombk NVARCHAR(60),
_numrub INT FOREIGN KEY REFERENCES CLASSIFICATION(numrub)
)
CREATE TABLE TARIFER
(
_numbk INT FOREIGN KEY REFERENCES BOOKS(numbk),
_nomed NVARCHAR(60) FOREIGN KEY REFERENCES EDITEURS(nomed),
_date DATE,
price DECIMAL(20,2),
PRIMARY KEY (_numouv, _nomed)
)
问题是:如何列出所有具有最高价格的书名 (nombk
)?
PS:TRAFIER
有价格列,以及来自 BOOKS
的外键 _numbk
我试过这个:
select
o.nombk, max(prix)
from
TARIFER tr, books o
where
o.numbk = tr._numbk
group by
o.nombk
这列出了所有,但是当我执行这个时:
select max(prix)
from TARIFER tr, books o
where o.numbk = tr._numbk
它returns只有最高价。我不知道为什么。有人可以解释一下吗?
在SQL服务器中,可以使用TOP (1) WITH TIES
:
select top (1) with ties b.nombk, t.prix
from books b join
TARIFER t
on b.numbk = t._numbk
order by t.prix desc;
两个查询都聚合,但不在同一级别:
第一个查询有 group by o.nombk
,所以它为每本书生成一条记录,并为您提供这本书在所有 tarifers 中的最高价格。
第二个查询没有 group by 子句,因此它为您提供了所有书籍的最高价格。
如果您想要价格较高的书,则无需聚合:您可以加入并按价格排序结果:
select top (1) with ties b.*, t.*
from books b
inner join join tarifer t on b.numbk = t._numbk
order by t.prix desc;
top (1) with ties
给你第一条记录;如果有几条记录具有相同的最高价格,则查询 returns 全部。
为什么不只使用一个子查询来获取 max(prix),然后使用该子查询列出具有该 prix 的所有记录:
select o.nombk ,prix
from TARIFER tr , books o
where o.numbk = tr._numbk
and tr.prix in (select max(prix) from TARIFER tr)
我有2张桌子
CREATE TABLE BOOKS
(
numbk INT PRIMARY KEY IDENTITY,
nombk NVARCHAR(60),
_numrub INT FOREIGN KEY REFERENCES CLASSIFICATION(numrub)
)
CREATE TABLE TARIFER
(
_numbk INT FOREIGN KEY REFERENCES BOOKS(numbk),
_nomed NVARCHAR(60) FOREIGN KEY REFERENCES EDITEURS(nomed),
_date DATE,
price DECIMAL(20,2),
PRIMARY KEY (_numouv, _nomed)
)
问题是:如何列出所有具有最高价格的书名 (nombk
)?
PS:TRAFIER
有价格列,以及来自 BOOKS
的外键 _numbk
我试过这个:
select
o.nombk, max(prix)
from
TARIFER tr, books o
where
o.numbk = tr._numbk
group by
o.nombk
这列出了所有,但是当我执行这个时:
select max(prix)
from TARIFER tr, books o
where o.numbk = tr._numbk
它returns只有最高价。我不知道为什么。有人可以解释一下吗?
在SQL服务器中,可以使用TOP (1) WITH TIES
:
select top (1) with ties b.nombk, t.prix
from books b join
TARIFER t
on b.numbk = t._numbk
order by t.prix desc;
两个查询都聚合,但不在同一级别:
第一个查询有
group by o.nombk
,所以它为每本书生成一条记录,并为您提供这本书在所有 tarifers 中的最高价格。第二个查询没有 group by 子句,因此它为您提供了所有书籍的最高价格。
如果您想要价格较高的书,则无需聚合:您可以加入并按价格排序结果:
select top (1) with ties b.*, t.*
from books b
inner join join tarifer t on b.numbk = t._numbk
order by t.prix desc;
top (1) with ties
给你第一条记录;如果有几条记录具有相同的最高价格,则查询 returns 全部。
为什么不只使用一个子查询来获取 max(prix),然后使用该子查询列出具有该 prix 的所有记录:
select o.nombk ,prix
from TARIFER tr , books o
where o.numbk = tr._numbk
and tr.prix in (select max(prix) from TARIFER tr)