SELECT customer_id, COUNT(*)
FROM orders
GROUP BY customer_id
HAVING customer_id
类似上面的 MySQL 代码,以下 Oracle 代码列出了客户ID小于5的客户信息,并显示他们的订单数:
SELECT customer_id, COUNT(*)
FROM orders
WHERE customer_id10;
除了 Count()、Sum()、Avg() 之外,还可以使用 Max() 和 Min() 函数。以下 MySQL 代码演示了如何使用 Max() 函数来查找订单数量最多的客户:
SELECT customer_id, MAX(order_count)
FROM (
SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id
) AS temp;
Oracle 也支持 Max() 和 Min() 函数,以下代码查找了订单数量最多的客户:
SELECT customer_id, order_count
FROM (
SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id
ORDER BY order_count DESC
) WHERE ROWNUM = 1;
最后,需要注意分组查询返回的结果是无序的。如果需要按特定列排序,可以使用 Order By 子句。以下 MySQL 代码演示了如何按订单数量排序:
SELECT customer_id, COUNT(*)
FROM orders
GROUP BY customer_id
ORDER BY COUNT(*) DESC;
Oracle 中也支持 Order By 子句,以下代码也按订单数量排序:
SELECT customer_id, COUNT(*)
FROM orders
GROUP BY customer_id
ORDER BY COUNT(*) DESC;
总结来说,MySQL 和 Oracle 都支持一系列分组函数和子句,可以提供准确的结果。当处理大量数据时,需要优化查询性能,包括使用合适的索引、使用聚合函数、优化 Join 语句等。分组查询在业务中也有广泛的应用,例如统计订单数量、客户数量等。大多数业务场景都需要对分组查询进行优化,以提升应用的性能。