2016-11-11 55 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