我必須在每一年展示哪個託運人的最大總成本。 我的查詢現在每年顯示每個託運人的總成本。所以在結果中,我必須列出年份,每年的託運人和總成本。 在此先感謝。查詢子查詢,每年有1個結果(最大)
select year(OrderDate), s.ShipperID, sum(freight)
from orders o
join shippers s on o.ShipVia = s.ShipperID
group by year(OrderDate),s.ShipperID
我必須在每一年展示哪個託運人的最大總成本。 我的查詢現在每年顯示每個託運人的總成本。所以在結果中,我必須列出年份,每年的託運人和總成本。 在此先感謝。查詢子查詢,每年有1個結果(最大)
select year(OrderDate), s.ShipperID, sum(freight)
from orders o
join shippers s on o.ShipVia = s.ShipperID
group by year(OrderDate),s.ShipperID
內部查詢一個是你的原始查詢,獲得由託運人的貨物價值。
內部查詢max獲取每年的最大值,然後查詢max加入查詢a,將a中的行限制爲那些年份爲=的年份的最大值。
乾杯 -
非常感謝西蒙。結果是完美的!會有一個更短的方式來做到這一點或是這樣嗎?電賀 – user3163154
如果您使用窗口函數,它會稍微縮短。
select shippers_ranked.OrderYear as OrderYear,
shippers_ranked.ShipperId as ShipperId,
shippers_ranked.TotalFreight as TotalFreight
from
(
select shippers_freight.*, row_number() over (partition by shippers_freight.OrderYear order by shippers_freight.TotalFreight desc) as Ranking
from
(
select year(OrderDate) as OrderYear,
s.ShipperID as ShipperId,
sum(freight) as TotalFreight
from orders o
inner join shippers s on o.ShipVia = s.ShipperID
group by year(OrderDate), s.ShipperID
) shippers_freight
) shippers_ranked
where shippers_ranked.Ranking = 1
order by shippers_ranked.OrderYear
;
你需要決定你想什麼發生如果兩個託運人有一年相同TotalFreight - 就像上面的代碼代表你會得到一個行(非確定性)。如果您想要一行,我會將ShipperId添加到over()
子句中的order by
,以便始終獲得同一行。如果在同一TotalFreight情況下,您希望返回多行,請使用dense_rank()
而不是row_number()
。
儘量用更多的信息來解釋,這將有助於我們得到你.. –
它可以幫助你如何發佈你需要的預期結果返回 – Kane
第一列:年份(列表)第二列: shipperID(當年成本最高的那個)和第3列:該年的託運人總成本。 – user3163154