代码编织梦想

原文链接:https://pyai.top 已经找不到原文章,博主删了

摘自:https://blog.csdn.net/intmainhhh/article/details/80777582

为什么不能够select * from Table group by id,为什么一定不能是*,而只能是某一个列或者某个列的聚合函数,group by 多个字段可以怎么去很好的理解呢?
正文开始

先来看下表1,表名为test:
表一 test

idnamenumber
1aa2
2aa3
3bb4
4bb5
5cc6
6dd7
7ee7
8bb5
9cc6

执行如下sql语句:

select name from test
group by name
  • 1
  • 2

你应该很容易知道运行的结果,没错,就是下表2:
表2

name
aa
bb
cc
dd
ee

可是为了能够更好的理解“group by”多个列“和”聚合函数“的应用,我建议在思考的过程中,由表1到表2的过程中,增加一个虚构的中间表:虚拟表3。下面说说如何来思考上面sql语句执行情况:

1.from test:该句执行后,应该结果和表1一样,就是原来的表。

2.from test group by name:该句执行后,我们想象生成了虚拟表3,如下所图所示,生成过程是这样的:group by name,那么找name那一列,具有相同name值的行,合并成一行,如对于name值为aa的,那么<1 aa 2>与<2 aa 3>两行合并成1行,所有的id值和number值写到一个单元格里面。
这里写图片描述
3.接下来就要针对虚拟表3执行select语句了:

(1)如果执行select *的话,那么返回的结果应该是虚拟表3,可是id和number中有的单元格里面的内容是多个值的,而关系数据库就是基于关系的,单元格中是不允许有多个值的,所以你看,执行select * 语句就报错了。

(2)我们再看name列,每个单元格只有一个数据,所以我们select name的话,就没有问题了。为什么name列每个单元格只有一个值呢,因为我们就是用name列来group by的。

(3)那么对于id和number里面的单元格有多个数据的情况怎么办呢?答案就是用聚合函数,聚合函数就用来输入多个数据,输出一个数据的。如cout(id),sum(number),而每个聚合函数的输入就是每一个多数据的单元格。

(4)例如我们执行select name,sum(number) from test group by name,那么sum就对虚拟表3的number列的每个单元格进行sum操作,例如对name为aa的那一行的number列执行sum操作,即2+3,返回5,最后执行结果如下:

name(无列名)
aa5
bb14
cc12
dd7
ee7

(5)group by 多个字段该怎么理解呢:如group by name,number,我们可以把name和number 看成一个整体字段,以他们整体来进行分组的。如下图
这里写图片描述
(6)接下来就可以配合select和聚合函数进行操作了。如执行select name,sum(id) from test group by name,number,结果如下图:

name(无列名)
aa1
aa2
bb3
bb12
cc14
dd6
ee7

sql 使用max()和group by 同时查询这条记录的其他信息_xx_star1204的博客-爱代码爱编程

需求是这样的 SELECT MAX (discharge_amount),CHECK_YEAR FROM ims_source_item_summary GROUP BY CHECK_year ORDER BY CHECK_YEAR 查询某个时间内最大的值 ,结果如下: 但是我需要不仅仅查时间和最大值,还想要这条记录的id信息或者其他信息。

sql关于group by和max函数一起使用的坑(同理,求部门最高工资)-爱代码爱编程

前几天去参加一场面试,面试过程中有被问到一个SQL语句的问题,很遗憾没有回答上来,结果一面直接挂(问完这个问题后,当我听到面试官对我说:你有什么想问我的吗? 我的内心一片凉凉)。 其实面试官问的问题听起来很简单,一张剧目演出表,表中有(剧目ID,剧目名称,演出单位,票房),问:查询出每个演出单位票房最高的剧目名称。(听起来很简单吧) 我给面试官的答案是

数据库面试中的大坑!Group by 与 max联合使用-爱代码爱编程

数据库面试中的大坑!Group by 与 max联合使用 相信大家都做过返回各部门中薪水最高的员工信息,是否注意到里面的细节呢? 由于group by聚合函数的特殊性,会造成联合其他函数时产生各种各样的错误,尤其max和group by使用最为频繁,今天通过mysql案例揭示其背后的错误原因,并提出解决方法。首先我们先来了解下group by函数。 1

min/max 与group by连用(MySQL8.0.19)-爱代码爱编程

MySQL使用的版本:8.0.19; 准备2张表:student,score; student表 stuid:学号classid:班级id;stuName:学生名字 score表: courseid:课程idstuid:学号score:分数现在查询各班各科成绩最高分;分组按照:班级和科目来分: select c.courseid,classid,

max等聚合函数和group by搭配使用的注意事项-爱代码爱编程

1 group by的特点 1.1 定义 group_by的意思是根据by对数据按照哪个字段进行分组,或者是哪几个字段进行分组。 如果不在group by 后的分组中使用聚合函数,一般只会返回各个分组中的第一条数据,而且各分组内的数据是默认按照asc升序排列。 如果group by 和having后面接了order by,则这个order by 不

【4 - 分组】sql server - 郝斌(分组group by、过滤having、聚合函数max() / count()、排序order by、select语句的执行顺序)_我愚蠢的_理想主义的博客-爱代码爱编程

课程地址:数据库 SQLServer 视频教程全集(99P)| 22 小时从入门到精通_哔哩哔哩_bilibili ​ 目录 group by(分组)  group by a,b 的用法  having(对分组之后的信息进行过滤)  having和where的区别  总结 PPT内容总结与复习 函数的分类 聚合函数的使用 max()

mysql 使用group by 分组 max() 排序,获取第一条数据_mysql group by 取最大的一条-爱代码爱编程

SELECT column_name_1, MAX(oper_time) AS min_date FROM table_name WHERE column_name_2= '' GROUP BY column_na