我暂时遇到GROUP BY
错误的问题,而且令我恼火的是,最终的修复是将每个违规列添加到GROUP BY
子句中。在做了一些研究后,我仍然不能完全理解为什么这会抛出一个错误,而不是给你一个非常丑陋的表,但这不是重要的部分。
重要的是,根据我的研究,SELECT [ProductName]
,[CompanyName]
,[CategoryID] AS 'CategoryName'
,SUM(Quantity) AS 'Total Ordered'
FROM [Order Details] AS t1
INNER JOIN Products AS t2
ON t1.ProductID = t2.ProductID
INNER JOIN Suppliers AS t3
ON t2.SupplierID = t3.SupplierID
GROUP BY ProductName, CategoryID, CompanyName
根据您传递给它的列合并相同的行。选择合适的方法将数据添加到一起。出于好奇,我复制了我现有的查询并做了一个小改动。如果我对GROUP BY如何工作的理解是正确的,它应该给我相同的输出:
原文:
SELECT [ProductName]
,[CompanyName]
,[CategoryID] AS 'CategoryName'
,Quantity AS 'Total Ordered'
FROM [Order Details] AS t1
INNER JOIN Products AS t2
ON t1.ProductID = t2.ProductID
INNER JOIN Suppliers AS t3
ON t2.SupplierID = t3.SupplierID
GROUP BY ProductName, CategoryID, CompanyName, Quantity
修改后的版本:
GROUP BY
我相信GROUP BY
子句会使用SUM(Quantity)作为它的聚合方法。它没。事实上,除了删除错误消息之外,我不知道它做了什么。
以下是输出的屏幕截图:inputParser
很明显,我对GROUP BY
的理解是错误的。我相信聚合方法是由列出的列中找到的数据类型决定的。既然情况并非如此,那么DO CREATE OR REPLACE VIEW
multimedia_collection
AS
SELECT id, name, attribute_1, attribute_2, 'MOVIES' AS media_type
FROM movies
UNION ALL
SELECT id, name, attribute_1, attribute_2, 'MUSIC' AS media_type
FROM music
UNION ALL
....
....
如何运作?
答案 0 :(得分:3)
GROUP BY
表示不聚合的列。因此,这些列中每个唯一的值组合将产生一行输出。
您在输出中想要的所有剩余列都需要聚合 - 但这就是错误消息告诉您的内容 - 它希望您告诉服务器哪种聚合是合适的。
答案 1 :(得分:0)
聚合方法不是由GROUP BY子句决定的。它应该在SQL中给出。第二个SQL查询只为您提供了唯一的组合,这些组合可以由GROUP BY子句列的值组成。