2016-11-11 65 views
0

,我发现了错误:简单查询中的sql错误?有任何想法吗?

Column 'A10000012VICKERS.dbo.IMAGES.idimage' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. 

任何想法,为什么我会收到此错误或如何解决它?我以为我只是要求大量的文件流列和其他两个值的大小?

SELECT 
idimage, 
filetype, 
SUM(DATALENGTH(filestreamimageoriginal)) AS original, 
SUM(DATALENGTH(filestreamimagefull)) AS [full], 
SUM(DATALENGTH(filestreamimageextra)) AS extra, 
SUM(DATALENGTH(filestreamimagelarge)) AS large, 
SUM(DATALENGTH(filestreamimagemedium)) AS medium, 
SUM(DATALENGTH(filestreamimagesmall)) AS small, SUM(DATALENGTH(filestreamimagethumbnail)) AS thumbnail 
FROM A10000012VICKERS.dbo.IMAGES WHERE display = 1 
+0

您是否搜索错误?这个问题之前已经被许多次问过很多次了。该错误消息也是不言自明的 – HoneyBadger

+0

可能重复[SQL查询与平均和组]通过(http://stackoverflow.com/questions/10702546/sql-query-with-avg-and-group-by) –

+0

MySQL的GROUP BY扩展允许您在不使用group by的情况下执行聚合函数。这在大多数关系数据库系统上不是标准行为。通常情况下,不使用聚合的select中的任何内容都应该在group by中。在MySQL的情况下,它会为idimage和fileyype选择一个不确定的值并使用它(性能优势)。如果idImage和filetype的所有值都相同,则不会出现问题,但如果它们不同,并且您希望查看每条记录的idimage和filetype,则必须将这些值添加到组中。 – xQbert

回答

1

我真的不知道该查询如何生成该消息。没有那个名字的列。但是,查询确实有一个明显的错误。

您的查询是一个聚合查询,因为它在SELECT子句中使用SUM()。但是,这只会返回一行,除非您还有一个GROUP BY

添加到您的查询的末尾:

GROUP BY idimage, filetype 

或者,从SELECT删除这些列。

+0

谢谢。有用。为什么我必须为此添加“分组依据”? –

+0

戈登,你的速度有传奇色彩,但是你能否加入一个解释,为什么在自己中包含SUM?将查询置于GROUP BY模式? –

+0

@TimBiegeleisen。 。 。包含聚合函数(例如SUM())是否将查询转换为聚合查询不明显? –

0

通过使用聚合函数(SUM),您正在聚合您的记录。由于您没有指定GROUP BY子句,您将得到一个结果行,即对所有行进行聚合。但是,在此聚合中,不再有一个idimage或一个filetype,您可以在结果中显示。

因此,如果您真的想在所有这些行上使用一个聚合,也可以在这些上使用聚合函数(例如max(idimage), min(filetype))或将它们从查询中移除。

但是,如果您想要按照idimagefiletype进行汇总,请在查询结尾处添加GROUP BY idimage, filetype