扫码一下
查看教程更方便
sql group by语句与 select 语句配合使用,用来将相同的数据进行分组。此 group by 语句跟在 select 语句的 where 子句之后,在 order by 子句之前。
group by 语句的基本语法如下。
select column1, column2
from table_name
where [ conditions ]
group by column1, column2
order by column1, column2
group by 语句必须跟在 where 语句中的条件之后,并且必须在 order by 子句之前。顺序很重要,如果顺序错误的话,sql是会报错的。
customers 表
---- ---------- ----- ----------- ----------
| id | name | age | address | salary |
---- ---------- ----- ----------- ----------
| 1 | ramesh | 32 | ahmedabad | 2000.00 |
| 2 | khilan | 25 | delhi | 1500.00 |
| 3 | kaushik | 23 | kota | 2000.00 |
| 4 | chaitali | 25 | mumbai | 6500.00 |
| 5 | hardik | 27 | bhopal | 8500.00 |
| 6 | komal | 22 | mp | 4500.00 |
| 7 | muffy | 24 | indore | 10000.00 |
---- ---------- ----- ----------- ----------
如果要想知道每个客户的工资总额,那么可以使用 group by 对salary字段进行分组,然后使用聚合函数sum进行组内相加。
sql> select name, sum(salary) from customers
group by name;
结果如下
---------- -------------
| name | sum(salary) |
---------- -------------
| chaitali | 6500.00 |
| hardik | 8500.00 |
| kaushik | 2000.00 |
| khilan | 1500.00 |
| komal | 4500.00 |
| muffy | 10000.00 |
| ramesh | 2000.00 |
---------- -------------
现在,让我们看一个表,其中 customers 表的name字段有重复的
---- ---------- ----- ----------- ----------
| id | name | age | address | salary |
---- ---------- ----- ----------- ----------
| 1 | ramesh | 32 | ahmedabad | 2000.00 |
| 2 | ramesh | 25 | delhi | 1500.00 |
| 3 | kaushik | 23 | kota | 2000.00 |
| 4 | kaushik | 25 | mumbai | 6500.00 |
| 5 | hardik | 27 | bhopal | 8500.00 |
| 6 | komal | 22 | mp | 4500.00 |
| 7 | muffy | 24 | indore | 10000.00 |
---- ---------- ----- ----------- ----------
现在,如果要想知道每个客户的工资总额,那么使用 group by 语句
sql> select name, sum(salary) from customers
group by name;
结果如下
--------- -------------
| name | sum(salary) |
--------- -------------
| hardik | 8500.00 |
| kaushik | 8500.00 |
| komal | 4500.00 |
| muffy | 10000.00 |
| ramesh | 3500.00 |
--------- -------------