请稍候,加载中....

SQL GROUP BY 语句

GROUP BY 语句

GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组

SQL GROUP BY 语法

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

 


演示数据库

在猿变手册教程中,我们将使用 yuanbian 样本数据库。

下面是选自"goods" 表的数据:

+----------+-----------------------------+-------------+
| goods_id | goods_name                  | goods_price |
+----------+-----------------------------+-------------+
|       10 | 猿变手册之C++               | 35          |
|       11 | 猿变手册之Python            | 25          |
|       12 | 猿变手册之疯狂前端          | 30          |
+----------+-----------------------------+-------------+

下面是选自 "orders" 表的数据:

+----------+--------------+----------+--------------+----------------+---------------------+
| order_id | order_no     | goods_id | order_amount | order_quantity | create_date         |
+----------+--------------+----------+--------------+----------------+---------------------+
|        1 | 201503120001 |       10 |         1000 |             10 | 2015-03-12 09:00:04 |
|        2 | 201503120002 |       12 |         1300 |             12 | 2015-03-12 17:23:10 |
|        3 | 201503130001 |       11 |         2400 |             22 | 2015-03-13 10:30:12 |
|        4 | 201503130002 |       12 |         2500 |             15 | 2015-03-13 11:00:05 |
|        5 | 201503130003 |       10 |         1400 |             15 | 2015-03-13 14:54:00 |
|        6 | 201503140001 |       12 |         2100 |             12 | 2015-03-14 11:34:00 |
+----------+--------------+----------+--------------+----------------+---------------------+

 


GROUP BY 应用

统计每天的订单金额:

select date(create_date) as order_date, sum(order_amount)
from orders
group by order_date;

执行以上 SQL 输出结果如下:

+------------+-------------------+
| order_date | sum(order_amount) |
+------------+-------------------+
| 2015-03-12 |              2300 |
| 2015-03-13 |              6300 |
| 2015-03-14 |              2100 |
+------------+-------------------+

 


GROUP BY 多表连接

下面的 SQL 语句统计商品订单数量, 订单金额:

SELECT goods_name,
COUNT(orders.goods_id) AS nums,
SUM(orders.order_amount) AS total_amount
FROM orders
LEFT JOIN goods
ON orders.goods_id=goods.goods_id
GROUP BY orders.goods_id;

执行以上 SQL 输出结果如下:

+-----------------------------+------+--------------+
| goods_name                  | nums | total_amount |
+-----------------------------+------+--------------+
| 猿变手册之C++               |    2 |         2400 |
| 猿变手册之疯狂前端          |    3 |         5900 |
| 猿变手册之Python            |    1 |         2400 |
+-----------------------------+------+--------------+

Python学习手册-