随笔 - 384  文章 - 0  评论 - 0  阅读 - 13万

力扣574(MySQL)-当选者(中等)

题目:

表: Candidate

  表: Vote

id 是自动递增的主键,CandidateId 是 Candidate 表中的 id.

问题:请编写 sql 语句来找到当选者的名字,上面的例子将返回当选者 B.

 注意: 你可以假设没有平局,换言之,最多只有一位当选者。

解题思路:

 ①先找出Vote表中出现次数最多的选手,将Vote中按CandidateId分组,并统计出现的id次数,降序排序,使用limit 1取出第一名;

1 SELECT CandidateId 
2 FROM vote_574 
3 GROUP BY CandidateId 
4 ORDER BY count( id ) DESC
5 LIMIT 1;

 ②筛选出Candidate表中与第①步查询出来的CandidateId相对应的Name。

复制代码
1 SELECT name 
2 FROM candidate_574 a,
3     ( SELECT CandidateId 
4       FROM vote_574 
5       GROUP BY CandidateId 
6       ORDER BY count( id ) DESC
7       LIMIT 1 ) as b
8 WHERE
9     a.id = b.CandidateId;
复制代码

或:

复制代码
1 SELECT name 
2 FROM 
3     ( SELECT CandidateId 
4       FROM vote_574 
5       GROUP BY CandidateId 
6       ORDER BY count( id ) DESC
7       LIMIT 1 ) as a
8 JOIN candidate_574 b
9 ON a.CandidateId = b.id;
复制代码

 补充建表语句:

复制代码
 1 Create table If Not Exists Candidate_574 (id int, Name varchar(255));
 2 Create table If Not Exists Vote_574 (id int, CandidateId int);
 3 -- 删除表中所有行数据
 4 Truncate table Candidate_574;
 5 insert into Candidate_574 (id, Name) values ('1', 'A');
 6 insert into Candidate_574 (id, Name) values ('2', 'B');
 7 insert into Candidate_574 (id, Name) values ('3', 'C');
 8 insert into Candidate_574 (id, Name) values ('4', 'D');
 9 insert into Candidate_574 (id, Name) values ('5', 'E');
10 Truncate table Vote_574;
11 insert into Vote_574 (id, CandidateId) values ('1', '2');
12 insert into Vote_574 (id, CandidateId) values ('2', '4');
13 insert into Vote_574 (id, CandidateId) values ('3', '3');
14 insert into Vote_574 (id, CandidateId) values ('4', '2');
复制代码
posted on   我不想一直当菜鸟  阅读(68)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示