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 |
+-----------------------------+------+--------------+
讨论区