列在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。[ntext] [重复]

Posted

技术标签:

【中文标题】列在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。[ntext] [重复]【英文标题】:Column is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.[ntext] [duplicate] 【发布时间】:2018-05-11 01:24:43 【问题描述】:

我是 sql 新手,如果答案很明显,我很抱歉,但我在任何地方都找不到。 所以我想选择同一类别中产品的类别名称、描述和平均价格。下面是所涉及的 2 个表的图片。问题是描述我找不到显示它的方法。 (有8个类别,每个类别有1个描述)

这是我到目前为止所做的代码,但它有错误:

SELECT  c.CategoryName,c.Description,avg(p.UnitPrice) 
FROM Categories AS c
INNER JOIN Products AS p ON c.CategoryID=p.CategoryID
GROUP BY c.CategoryName

错误:

Column 'Categories.Description' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

对不起我的英语不好:/

【问题讨论】:

错误告诉您您的确切问题。您在选择旁边的列表中有描述,但您的 group by 子句中没有它 我也试过了,但是因为它的 ntext 它说: text、ntext 和 image 数据类型无法比较或排序,除非使用 IS NULL 或 LIKE 运算符。 关于 ntext 和事物的错误意味着您不能按它进行分组,这是一个不同的错误。但是通过将SELECTGROUP BY 中的列转换为可以聚合的数据类型来解决它,例如CAST(c.Description AS VARCHAR(???)) where ???是可接受的长度或使用MAX 我之前尝试过,但只将它放在 group by 上,因为这就是我在某处看到它的方式,但没有用,但放在 select 上也可以!非常感谢马特,很抱歉问得很明显。 如果像这样在 CTE 中进行平均会发生什么? WITH CatAvgs as( SELECT CategoryID 'catid', avg(UnitPrice) 'avgprice' FROM Products GROUP BY CategoryID ) SELECT c.CategoryName, c.Description, a.avgprice FROM CatAvgs a INNER JOIN Categories c ON c.CategoryID = a.catid 【参考方案1】:

(n)text 不能用于聚合或窗口函数。自 SQL Server 2008 以来它也已被弃用(如果我没记错的话,可能是 2005 年)。你真的应该使用(n)varchar(MAX)

如果您真的“有”使用(n)text,那么您需要先进行聚合,然后检索您的(n)text 列的值:

WITH Averages AS (
    SELECT p.CategoryID, avg(p.UnitPrice) AS AveragePrice
    FROM p.CategoryID
    GROUP BY p.CategoryID)
SELECT C.CategoryName, C.Description, A.AveragePrice
FROM Averages A
     JOIN Categories C ON A.CategoryID = C.CategoryID;

(注意,由于缺少 DDL 和示例数据,因此未经测试)

【讨论】:

问题已在 cmets 中解决,但还是谢谢! @Larnu,我不确定 CTE 中是否需要加入。 你的意思是在哪里使用?我会接受你的回答,因为它也有效。 @SQLCliff 确实,您可以按 p.CategoryID 分组,然后在 CTE 之外完成。将保存第二个表查找。我会进行编辑。

以上是关于列在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。[ntext] [重复]的主要内容,如果未能解决你的问题,请参考以下文章

SQL:选择列表中的列无效,因为它不包含在聚合函数或 GROUP BY 子句中[关闭]

列“在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中”

列的原因在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中[重复]

列 'CM.PfmFolder.Id' 在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中

在 SQL 中使用 Group By 和 Aggregate - 获取错误“选择列表中的列无效,因为它不包含在聚合函数或 GROUP BY 中”

选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中