列在选择列表中无效,因为它不包含在聚合函数或 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 和事物的错误意味着您不能按它进行分组,这是一个不同的错误。但是通过将SELECT
和GROUP 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 中”