每组最高价

时间:2020-01-11 15:37:55

标签: sql sql-server

我有两个表-BrandAuto

Brand包含有关汽车品牌的信息。以下是各列:

BrandId
BrandName
BrandCountry

Auto包含有关特定型号的信息。列:

AutoId
AutoModel
BrandId
Price

其中Brand.BrandId = Auto.BrandId

我的任务是展示每个品牌的最高价格的汽车模型。

这是我用来显示品牌和最高价格的查询,而没有自动模型(并且有效):

SELECT Brand.BrandName, MAX(Price)
FROM Brand 
INNER JOIN Auto ON Brand.BrandId = Auto.BrandId
GROUP BY Brand.BrandName

问题在于它不显示模型,我还需要显示模型名称。我尝试将其附加以选择如下查询:

SELECT Brand.BrandName, Auto.AutoModel, MAX(Price)
FROM Brand 
INNER JOIN Auto ON Brand.BrandId = Auto.BrandId
GROUP BY Brand.BrandName

我得到了错误

选择列表中的“ Auto.AutoModel”列无效,因为它既不包含在聚合函数中也不在GROUP BY子句中。

我该如何实现?

请提供有关SQL Server正确语法的帮助,以解决该问题。

1 个答案:

答案 0 :(得分:1)

对表ROW_NUMBER()使用Auto窗口函数以获取每个BrandId的最高价格,然后加入Brand

SELECT b.BrandName, a.AutoModel, a.Price
FROM Brand AS b INNER JOIN (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY BrandId ORDER BY Price DESC) rn
  FROM Auto
) AS a
ON b.BrandId = a.BrandId
WHERE a.rn = 1
相关问题