我必須獲得啤酒的平均最高評價。我需要從兩張表中獲取此資訊,一張包含評級,另一張包含啤酒名稱,如下所示;
RB 表包含人們對啤酒的評價:Systembolaget 的文章編號 (SYSNR)、人的姓名 (NAME) 和評級 (RATING)。
另一張桌子是;表 B 包含有關不同型別啤酒的資訊:Systembolaget 的商品編號 (SYSNR)、生產商 (BREWERY)、啤酒名稱 (BEER)、原產國 (COUNTRY) 和升價 (PRICE)。
使用以下代碼,我可以獲得最高平均評分的啤酒;
select sysnr, avg(rating) as avg_rating from rb group by sysnr order by avg(rating) desc limit 1;
我嘗試將其與以下代碼結合以獲取啤酒的名稱,但出現此錯誤:錯誤:子選擇回傳 2 列 - 預期為 1
select beer from b where sysnr in(select sysnr, avg(rating) as
avg_rating
from rb
group by sysnr
order by avg(rating) desc limit 1);
uj5u.com熱心網友回復:
我想你很接近。獲得平均值的預查詢是好的。一旦你有了這個限制 1,然后加入啤酒表以獲取啤酒的名稱。
select
b.nsme,
Avgs.avg_rating
from
( select
sysnr,
avg(rating) avg_rating
from
rb
group by
sysnr
order by
avg(rating) desc
limit 1 ) Avgs
JOIN b
on Avgs.sysnr = b.sysnr
uj5u.com熱心網友回復:
我想在RANK()這里使用:
WITH cte AS (
SELECT sysnr, AVG(rating) AS avg_rating, RANK() OVER (ORDER BY AVG(rating) DESC) rnk
FROM rb
GROUP BY sysnr
)
SELECT sysnr, avg_rating
FROM cte
WHERE rnk = 1;
uj5u.com熱心網友回復:
select beer, extra_data.avg_rating from b join (select sysnr as sysnr, avg(rating) as avg_rating from rb group by sysnr order by avg(rating)) extra_data on extra_data.sysnr = b.sysnr ;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/438760.html
上一篇:選擇具有特定值的重復行
下一篇:識別表A中的新值并將它們插入表B
