前述
- Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
- Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
题目描述
leetcode题目:602. 好友申请 II: 谁有最多的好友
思路
关键点:用 union all,(而不是 union)。因为 union all 不去重。
写法一
select ids as id, count(ids) as num
from(
select requester_id as ids from RequestAccepted
union all
select accepter_id from RequestAccepted
) A
group by ids
order by num desc
limit 1;
写法二
select ids as id, cnt as num
from(
select ids, count(ids) as cnt
from(
select requester_id as ids from RequestAccepted
union all
select accepter_id from RequestAccepted
) A
group by ids
) B
order by cnt desc
limit 1;
写法一和写法二一样的,就是多加了层嵌套。
反思:筛选指定行的时候,可以通过排序+limit取最大的行。不要老是想着max()找最大的。
- 取整行的时候:排序+limit
- 取最值的时候:、max(col),只能保证col这一列中最大值,而不是完整的相对应的行。