求助,帮忙看一下这个段SQL语句中max()函数的作用是什么

发布于 2022-09-12 04:47:08 字数 495 浏览 20 评论 0

书中的例子,数据库如图,需求是:查询只加入一个社团的学生的社团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()函数的作用是?
image

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

少女净妖师 2022-09-19 04:47:08

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

甩你一脸翔 2022-09-19 04:47:08

语法要求,使用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

不必了 2022-09-19 04:47:08

参考如下:

SELECT 参数 CASE WHEN 条件 THEN 【1】 ELSE 【2】 END FROM ... GROUP BY ... .

如果条件成立,执行1,条件不成立则执行2,这点没有异议。

GROUP BY std_id 

返回以std_id分组的聚合结果,如图所示的聚合结果应该是返回了 5 行,但是这 5 行数据的具体值是由 SELECT 与 FROM 之间的条件决定的,sum、count、max 等这些函数都可以对每一个组的数据进行统计,并且每一个组返回有且仅有一个结果,所以是 5 行。

 ELSE MAX(CASE WHEN main_club_flg = 'Y'
                          THEN club_id
                          ELSE NULL END)

这句话中,当条件成立,返回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。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文