求助,帮忙看一下这个段SQL语句中max()函数的作用是什么
书中的例子,数据库如图,需求是:查询只加入一个社团的学生的社团ID和加入多个社团的学生的社团主ID,Y为社团主ID,书中给出的代码是:
SELECT std_id,
CASE WHEN COUNT(*) = 1 /* 只加入了一个社团的学生 */
THEN MAX(club_id)
ELSE MAX(CASE WHEN main_club_flg = 'Y'
THEN club_id
ELSE NULL END)
END AS main_club
FROM StudentClub
GROUP BY std_id;
请问MAX(CASE WHEN main_club_flg = 'Y'这句话中MAX()函数的作用是?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
啥书啊,怎么感觉不靠谱啊。应该不用加。
加的话可能是,数据库字段存在空的情况(我猜的),如下情况:
|std_id|club_id|club_name|main_club_flag|
100 null null Y
100 2 xxxx Y
语法要求,使用
group by
聚合,select中不能包含非聚合列。引用一下MySQL官网说法,在SQL-92和更早版本不允许查询列中包含非聚合列,只能为group by中的列和聚合函数(
MAX
、MIN
、COUNT
、SUM
...)。例如下面写法是不允许的,可能会报错:MAX(club_id)表示取出每个学生加入的社团的最大社团id
参考如下:
如果条件成立,执行1,条件不成立则执行2,这点没有异议。
返回以std_id分组的聚合结果,如图所示的聚合结果应该是返回了 5 行,但是这 5 行数据的具体值是由 SELECT 与 FROM 之间的条件决定的,sum、count、max 等这些函数都可以对每一个组的数据进行统计,并且每一个组返回有且仅有一个结果,所以是 5 行。
这句话中,当条件成立,返回club_id,不成立返回NULL,然后再是MAX(返回值),这里表示了只有 main_club_flg 等于 Y 的时候,才会返回 club_id,然后是MAX(club_id),否则就是MAX(NULL)。
整个的意思就是:
如果当std_id =100的数据只有一条时,返回club_id的最大值,如果不止一条,则根据 main_club_flg 来判断,如果等于 Y ,则返回club_id的最大值,否则返回NULL。