我有两个表-Brand
和Auto
。
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正确语法的帮助,以解决该问题。
答案 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