Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 列在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中(嵌套select,内部联接)_Sql_Sql Server - Fatal编程技术网

Sql 列在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中(嵌套select,内部联接)

Sql 列在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中(嵌套select,内部联接),sql,sql-server,Sql,Sql Server,我的MS SQL Server数据库中有两个表:Brand和Auto 品牌表包含有关汽车品牌的信息。以下是专栏: 布兰迪, 品牌名称, 布兰德乡村 自动表格包含有关特定型号的信息。柱: 自动识别, 自动建模, 布兰迪, 价格 两个表之间的关系可以如下所示: Brand.BrandId=Auto.BrandId 我的目标是展示一个品牌,该品牌拥有与该品牌相关的所有汽车的最高平均价格。 下面是我用来显示最大平均和的查询,它是有效的: SELECT MAX(AverageSum) AS Average

我的MS SQL Server数据库中有两个表:Brand和Auto

品牌表包含有关汽车品牌的信息。以下是专栏: 布兰迪, 品牌名称, 布兰德乡村

自动表格包含有关特定型号的信息。柱: 自动识别, 自动建模, 布兰迪, 价格

两个表之间的关系可以如下所示:

Brand.BrandId=Auto.BrandId 我的目标是展示一个品牌,该品牌拥有与该品牌相关的所有汽车的最高平均价格。 下面是我用来显示最大平均和的查询,它是有效的:

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

用你正在使用的数据库标记你的问题。用你正在使用的数据库标记你的问题。