Mysql – Union与Union All

使用力扣-SQL 602.好友申请Ⅱ来说明一下Mysql中的UnionUnion All的用法和它们的区别

Union

在Mysql中Union的作用是将多个select查询的结果连接放置在一个结果集当中,不过会去除重复列,这个去重的逻辑是这样的:假如选取的是一列内容,只会保留一列内容中非重复项,假如选取的是多列内容,那么保留的是多列组合的非重复项。

以602.好友申请Ⅱ为例子来查看一下Union的作用

首先是选取一列的时候

select requester_id as id
from RequestAccepted
union select accepter_id as id
from RequestAccepted

输入:

requester_idaccepter_idaccept_date
122016/06/03
132016/06/08
232016/06/08
342016/06/09

输出:

| id |
| — |
| 1 |
| 2 |
| 3 |
| 4 |

可以看见将 requester_id和accepter_id的结果都组合到了一列中,同时只保留了非重复元素

接下来是选取两列元素的情况

select requester_id as id,accept_date
from RequestAccepted
union select accepter_id as id,accept_date
from RequestAccepted

输出:

| id | accept_date |
| — | ———– |
| 1 | 2016-06-03 |
| 1 | 2016-06-08 |
| 2 | 2016-06-08 |
| 3 | 2016-06-09 |
| 2 | 2016-06-03 |
| 3 | 2016-06-08 |
| 4 | 2016-06-09 |

可以看见,对于两个(3,2016-06-08)其只保留了其中的一个,会对两个元素的组合去重。

Union ALL

介绍完Union,再来说Union ALL就非常的简单,Union ALL与Union的区别就在于 Union会去除重复元素,而Union ALL则会返回所有元素。

将以上选取两列的SQL使用Union ALL改写一下后得到的数据效果:

select requester_id as id,accept_date
from RequestAccepted
union all 
select accepter_id as id,accept_date
from RequestAccepted

输出内容:

| id | accept_date |
| — | ———– |
| 1 | 2016-06-03 |
| 1 | 2016-06-08 |
| 2 | 2016-06-08 |
| 3 | 2016-06-09 |
| 2 | 2016-06-03 |
| 3 | 2016-06-08 |
| 3 | 2016-06-08 |
| 4 | 2016-06-09 |

这次,其返回的数据集就是没有去重的。

602.好友申请Ⅱ题解

RequestAccepted 表:

+----------------+---------+
| Column Name    | Type    |
+----------------+---------+
| requester_id   | int     |
| accepter_id    | int     |
| accept_date    | date    |
+----------------+---------+
(requester_id, accepter_id) 是这张表的主键(具有唯一值的列的组合)。
这张表包含发送好友请求的人的 ID ,接收好友请求的人的 ID ,以及好友请求通过的日期。

编写解决方案,找出拥有最多的好友的人和他拥有的好友数目。

生成的测试用例保证拥有最多好友数目的只有 1 个人。

对于以上的题目与要求使用Union ALL就非常简单的解决啦~

with tmp as(
    select requester_id as id
    from RequestAccepted
    union all 
    select accepter_id as id
    from RequestAccepted
)
select id,count(1) as num
from tmp
group by id
order by num desc limit 1
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇