求助,帮忙看一下这个段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()函数的作用是?

回答

语法要求,使用group by聚合,select中不能包含非聚合列。

SQL-92 and earlier does not permit queries for which the select list, HAVING condition, or ORDER BY list refer to nonaggregated columns that are not named in the GROUP BY clause. For example, this query is illegal in standard SQL-92 because the nonaggregated name column in the select list does not appear in the GROUP BY:

引用一下MySQL官网说法,在SQL-92和更早版本不允许查询列中包含非聚合列,只能为group by中的列和聚合函数(MAXMINCOUNTSUM...)。例如下面写法是不允许的,可能会报错:

SELECT std_id,club_id from StudentClub group by std_id;

MAX(club_id)表示取出每个学生加入的社团的最大社团id

啥书啊,怎么感觉不靠谱啊。应该不用加。
加的话可能是,数据库字段存在空的情况(我猜的),如下情况:
|std_id|club_id|club_name|main_club_flag|
100 null null Y
100 2 xxxx Y

以上是 求助,帮忙看一下这个段SQL语句中max()函数的作用是什么 的全部内容, 来源链接: utcz.com/a/45278.html

回到顶部