我有三個這樣的表:
物件(NumId 是主鍵)
編號 | 物件類別 | 價格 |
---|---|---|
1 | 永恒的 | 20 |
2 | 借來的 | 30 |
3 | 借來的 | 10 |
集合(ColName 是Primary Key)
列名 |
---|
collection_alpha |
收藏貝莎 |
借來的
(NumObj是外鍵/主鍵參考Object表,Collection_name是外鍵參考Collection表)
數字物件 | 收藏名稱 |
---|---|
1 | collection_alpha |
2 | 收藏貝莎 |
3 | 收集貝莎 |
我需要做的查詢是:“哪些收藏(不包括永久收藏)的借用物件總成本最高?”
我目前的嘗試(不起作用):
SELECT ColName FROM Colecao
WHERE (
SELECT MAX((SUM(Price)) FROM Objects AS Num
JOIN Borrowed ON NumObj = Objects.NumId
JOIN Collection ON ColName = Collection_name
WHERE Num > COUNT(NumId) FROM Objects
WHERE Object_category = "permanent"
);
它回傳訊息:“語法錯誤”
uj5u.com熱心網友回復:
“哪些藏品 [...] 的借用物品總成本最高?”
select
b.Collection_name,
sum(o.price) Worth
from
Objects o
inner join Borrowed b on b.NumObj = o.NumId
where
o.Object_category = 'borrowed'
group by
b.Collection_name
order by
sum(o.price) desc
為您提供按借用物件的總價值降序排列的所有集合的串列。您可以添加limit 1
以顯示串列的頂部專案。
但是想象一下,有兩個系列恰好具有相同的總價值。他們都有“最高的借用物件總成本”,所以都應該歸還。上面的查詢limit 1
將省略其中之一。
在這種情況下,我們可以根據它們的價值對集合進行排名,并回傳 rank = 1 的所有行。
select
*
from
(
select
*,
rank() over (order by Worth desc) rnk
from
(
select
b.Collection_name,
sum(o.price) Worth
from
Objects o
inner join Borrowed b on b.NumObj = o.NumId
where
o.Object_category = 'borrowed'
group by
b.Collection_name
) collections
) collections_ranked
where
rnk = 1
order by
Collection_name
或者,我們可以設定一個CTE并表達相同的內容,如下所示:
with
collections as (
select
b.Collection_name,
sum(o.price) Worth
from
Objects o
inner join Borrowed b on b.NumObj = o.NumId
where
o.Object_category = 'borrowed'
group by
b.Collection_name
)
select
Collection_name,
Worth
from
collections
where
Worth = (select max(worth) from collections)
order by
Collection_name
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/470341.html
上一篇:根據其他列更新列
下一篇:查詢連接表時有沒有辦法回傳空值行