「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试,代码能力和工作效率也会有明显提升。
题目介绍: 当选者 winning-candidate
难度中等
SQL架构
表:
Candidate+-----+---------+
| id | Name |
+-----+---------+
| 1 | A |
| 2 | B |
| 3 | C |
| 4 | D |
| 5 | E |
+-----+---------+表:
Vote+-----+--------------+
| id | CandidateId |
+-----+--------------+
| 1 | 2 |
| 2 | 4 |
| 3 | 3 |
| 4 | 2 |
| 5 | 5 |
+-----+--------------+
id 是自动递增的主键,
CandidateId 是 Candidate 表中的 id.请编写 sql 语句来找到当选者的名字,上面的例子将返回当选者
B.
+------+
| Name |
+------+
| B |
+------+用了order by 全局排序 不够好
sql
select
Name
from Candidate c
left join Vote v
on c.id = v.CandidateId
group by Name
order by count(*) desc
limit 1先过滤再 效率高很多
sql
select Name
from Candidate
where id =
(
select CandidateId
from
(
select CandidateId,
count(*) over(partition by CandidateId ) cnt
from Vote
order by cnt desc
limit 1
)t1
)