Sql 列在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中(嵌套select,内部联接)
我的MS SQL Server数据库中有两个表:Brand和Auto 品牌表包含有关汽车品牌的信息。以下是专栏: 布兰迪, 品牌名称, 布兰德乡村 自动表格包含有关特定型号的信息。柱: 自动识别, 自动建模, 布兰迪, 价格 两个表之间的关系可以如下所示: Brand.BrandId=Auto.BrandId 我的目标是展示一个品牌,该品牌拥有与该品牌相关的所有汽车的最高平均价格。 下面是我用来显示最大平均和的查询,它是有效的:Sql 列在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中(嵌套select,内部联接),sql,sql-server,Sql,Sql Server,我的MS SQL Server数据库中有两个表:Brand和Auto 品牌表包含有关汽车品牌的信息。以下是专栏: 布兰迪, 品牌名称, 布兰德乡村 自动表格包含有关特定型号的信息。柱: 自动识别, 自动建模, 布兰迪, 价格 两个表之间的关系可以如下所示: Brand.BrandId=Auto.BrandId 我的目标是展示一个品牌,该品牌拥有与该品牌相关的所有汽车的最高平均价格。 下面是我用来显示最大平均和的查询,它是有效的: SELECT MAX(AverageSum) AS Average
SELECT MAX(AverageSum) AS AverageSum
FROM (
SELECT
Brand.BrandName AS BrandName, (SUM(Price) / COUNT(Auto.BrandId)) AS AverageSum
FROM
Brand INNER JOIN Auto
ON
Brand.BrandId = Auto.BrandId
GROUP BY
Brand.BrandName) AS ChosenBrand
问题是它只显示一个数字,但我还需要显示品牌名称。我尝试附加品牌名称ChosenBrand.BrandName以选择如下查询:
SELECT ChosenBrand.BrandName, MAX(AverageSum) AS AverageSum
FROM (
SELECT
Brand.BrandName AS BrandName, (SUM(Price) / COUNT(Auto.BrandId)) AS AverageSum
FROM
Brand INNER JOIN Auto
ON
Brand.BrandId = Auto.BrandId
GROUP BY
Brand.BrandName) AS ChosenBrand
SELECT ChosenBrand.BrandName, MAX(AverageSum) AS AverageSum
FROM (
SELECT
Brand.BrandName AS BrandName, (SUM(Price) / COUNT(Auto.BrandId)) AS AverageSum
FROM
Brand INNER JOIN Auto
ON
Brand.BrandId = Auto.BrandId
GROUP BY
Brand.BrandName) AS ChosenBrand
GROUP BY
ChosenBrand.BrandName
我得到了错误
列“ChosenBrand.BrandName”在选择列表中无效,因为
它既不包含在聚合函数中,也不包含在GROUP BY中
条款
如果我将GROUP BY附加到查询的末尾,如下所示:
SELECT ChosenBrand.BrandName, MAX(AverageSum) AS AverageSum
FROM (
SELECT
Brand.BrandName AS BrandName, (SUM(Price) / COUNT(Auto.BrandId)) AS AverageSum
FROM
Brand INNER JOIN Auto
ON
Brand.BrandId = Auto.BrandId
GROUP BY
Brand.BrandName) AS ChosenBrand
SELECT ChosenBrand.BrandName, MAX(AverageSum) AS AverageSum
FROM (
SELECT
Brand.BrandName AS BrandName, (SUM(Price) / COUNT(Auto.BrandId)) AS AverageSum
FROM
Brand INNER JOIN Auto
ON
Brand.BrandId = Auto.BrandId
GROUP BY
Brand.BrandName) AS ChosenBrand
GROUP BY
ChosenBrand.BrandName
它以平均值显示所有品牌,但我只需要一个,即最大值。我如何实现这一点
请使用正确的MS SQL Server语法帮助解决此问题。如果您只需要一行(如果是平局),请使用ORDER BY并将结果集限制为一行。在标准SQL中,这看起来像:
SELECT b.BrandName AS BrandName, AVG(Price) AS avg_price
FROM Brand b INNER JOIN
Auto a
ON b.BrandId = a.BrandId
GROUP BY b.BrandName
ORDER BY avg_price DESC
FETCH FIRST 1 ROW ONLY;
某些数据库使用LIMIT或SELECT TOP将结果集限制为一行
注:
表别名使查询更易于编写和读取。使用表名缩写。
SQL有一个聚合函数AVG,它可以满足您的需要。你不需要明确的划分。
如果您只需要一行(如果是平局),则使用ORDER BY并将结果集限制为一行。在标准SQL中,这看起来像:
SELECT b.BrandName AS BrandName, AVG(Price) AS avg_price
FROM Brand b INNER JOIN
Auto a
ON b.BrandId = a.BrandId
GROUP BY b.BrandName
ORDER BY avg_price DESC
FETCH FIRST 1 ROW ONLY;
某些数据库使用LIMIT或SELECT TOP将结果集限制为一行
注:
表别名使查询更易于编写和读取。使用表名缩写。
SQL有一个聚合函数AVG,它可以满足您的需要。你不需要明确的划分。
感谢您的回答,以下是MS SQL Server的解决方案:
SELECT TOP 1
Brand.BrandName AS BrandName, (SUM(Price) / COUNT(Auto.BrandId)) AS AverageSum
FROM
Brand INNER JOIN Auto
ON
Brand.BrandId = Auto.BrandId
GROUP BY
Brand.BrandName
ORDER BY
AverageSum DESC
感谢您的回答,以下是MS SQL Server的解决方案:
SELECT TOP 1
Brand.BrandName AS BrandName, (SUM(Price) / COUNT(Auto.BrandId)) AS AverageSum
FROM
Brand INNER JOIN Auto
ON
Brand.BrandId = Auto.BrandId
GROUP BY
Brand.BrandName
ORDER BY
AverageSum DESC
用你正在使用的数据库标记你的问题。用你正在使用的数据库标记你的问题。