sql语句中啥啥要用到group bygroup by啥根据啥分组的

这个group by的问题,我之前也纠结很久,觉得别人怎么说我都无法真正理解,最后是老板的老板花了2个下班时间帮我讲通的,惭愧。。。
首先,可以跳出group by这个具体语句的角度思考,而去思考发明这个语句要解决的问题。
假设有这样一张表,列举了每个小朋友今天吃的水果。
sql语句中啥啥要用到group bygroup by啥根据啥分组的

现在,我想知道每个小朋友今天吃了几个水果?那我最后想要的,就是这种结果
sql语句中啥啥要用到group bygroup by啥根据啥分组的

如果手动数数,你会怎么数呢?我会先在姓名里面找“花花”,然后数一数有几行,有几行就代表她吃了几个水果,再数“泡泡”的行数,以此类推。这其实就是在分组数行数,用SQL语句表达,就是
select 姓名,count(*)
from table
group by 姓名

那如果是想知道,每个小朋友今天吃了几种水果呢?这时候就需要不重样地去数水果,也就是说,除了按姓名分组,还要看水果的种类,而不是简单的行数。在数到“泡泡”的时候,我们就看到她其实是吃了两个橙子,水果种类只有一种,用SQL语句表达,就是
select 姓名,count(distinct 水果)
from table
group by 姓名

■网友
比如一个 姓名 科目 成绩 表:group by 姓名 就可以为每个学生列出其各科成绩group by 科目 可以为按科目列出学生成绩,或者在前面的select语句里计算单科平均分等group by 成绩 可以按分数为学生分类(假如成绩是5分制的话)
■网友
主要用于汇总数据,比如计算平均值、最大最小值、技术以及累计值等等,而group by 后面的关键字就是分钟字段,表示你用什么字段进行汇总。比如,select max(score) as maxscore from table group by class,表示:表中数据按照“班级(class)”进行汇总,求出每个班级的汇总结果,这里计算的是每个班级的最高分数。

■网友
【sql语句中啥啥要用到group bygroup by啥根据啥分组的】 借用一下 @柚子苏苏 的小朋友例子,group by 姓名,其实是指我现在要按姓名为标杆将这个表分类了,换句话说就是我现在看姓名这列,姓名一样的就是一个小组,按这样划分,整个表将分为几个小组,分完后现在我要计算每个小朋友吃的水果数量,这里用到聚集函数count(),我已经按姓名分类了,每个姓名所对应的水果数就可以通过count函数算出来了。

■网友
一张收入表,张三有五条记录,李四有三条记录,你想求他们收入的总和,就要sum,然后group by姓名,group by的意思就是按照你规定的字段来分组,多实际操作,IT技能和学校的某些学科的学习方法不一样,先上手操作,然后再想为什么。

■网友
GROUP BY 语句根据一个或多个字段对结果集进行分组(也就是把值相同放到一个组中,显示组中一条记录),实现对每个组而不是对整个结果集统计。比如要统计每个部门人数。
根据需要分组,比如要统计部门人数,就需要根据部门分组,看具体需求。
你可以看一下
group by分组查询用法


    推荐阅读