什么是Group By函数
Group By 是一种 SQL 查询语句中的关键字,用于按照指定的列将行分组,以计算每个组的聚合函数或其他操作。
使用 GROUP BY
语句可以根据一个或多个列对结果进行分组。在将数据分组之前,可以根据一个或多个列对数据进行排序。
使用Group By函数的逻辑
在使用 GROUP BY
语句进行数据分组操作时,以下是一些逻辑需求:
通过Group By对数据进行分组
GROUP BY
关键字用于将结果集中行的分组。在 SELECT 语句中使用 GROUP BY
关键字时,SELECT 语句返回每个组的汇总信息。
例如,查找产品的最高价格:
SELECT ProductID, MAX(UnitPrice) FROM Products GROUP BY ProductID;
过滤分组结果
GROUP BY
语句与 HAVING 子句一起使用时,可以过滤分组结果。HAVING 子句可以对汇总信息进行筛选。WHERE 子句用于对原始数据进行筛选。
例如,查找产品的最高价格,价格高于 30 并且每件产品中的单元价格高于 10:
SELECT ProductID, MAX(UnitPrice) FROM Products GROUP BY ProductID HAVING MAX(UnitPrice) > 30 AND MIN(UnitPrice) > 10;
使用其他列进行排序
可以使用其他列来对查询结果进行排序。
例如,查找产品的最高价格,并按日期对其进行排序:
SELECT ProductID, MAX(UnitPrice) FROM Products GROUP BY ProductID ORDER BY OrderDate;
使用实例
以下示例显示如何使用 GROUP BY 子句查询客户列表,返回汇总信息并按国家和城市进行分组。
SELECT Country, City, COUNT(*) AS Customers FROM Customers GROUP BY Country, City;
以下示例显示如何使用 GROUP BY
子句查询从所有订单中计算的产品分类汇总信息:
SELECT Category, SUM(Quantity) AS Units FROM OrderDetails
INNER JOIN Products ON Products.ProductID = OrderDetails.ProductID
GROUP BY Category
ORDER BY Units DESC;
以上示例返回产品分类的汇总数据,并按单元数量从高到低排序。
以下示例显示如何使用 GROUP BY
子句计算每个产品的订单数并按订单数降序排序:
SELECT Products.ProductName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM Orders
JOIN OrderDetails ON Orders.OrderID = OrderDetails.OrderID
JOIN Products ON OrderDetails.ProductID = Products.ProductID
GROUP BY Products.ProductName
ORDER BY COUNT(Orders.OrderID) DESC;
以上示例返回每个产品的订单总数,并按订单总数从高到低排序。