牛刀小试 ——《当选者》LeetCode Plus 会员专享题详细解析Hive / MySQL

Posted 报告,今天也有好好学习

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛刀小试 ——《当选者》LeetCode Plus 会员专享题详细解析Hive / MySQL相关的知识,希望对你有一定的参考价值。

大家好,我是老吴,大家也可以叫我吴同学,再小一点的朋友也可以叫我吴师兄。欢迎大家跟我一起走进数据分析的世界,一起学习!

感兴趣的朋友可以关注我的数据分析专栏,里面有许多优质的文章跟大家分享哦。
另外也欢迎大家关注我的SQL刷题专栏,里面有我分享的高质量SQL题,以及详细的解析。


本篇博文又是我的SQL题分享环节,为了记录一下自己的做题过程,以及防止后续力扣会员过期无法再次查看题目,所以我每天都会给大家选出一道质量较高的SQL题目发表到博客上,并且会加上自己的一些解题技巧或实用知识点,希望对大家也能有所帮助。

那么今天给大家分享的题是LeetCode的第574题——当选者

下面是问题的详细描述。

问题描述

表: `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    |
+------+

注意:

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

解题思路

  1. 按CandidateId 分组,求出每个id的得票情况;
  2. 用order by排序和limit 1选出最多的id(这里经常有人想不起用limit而是去用max然后再进一步求出id,这样就慢了一步);
  3. left join Candidate表得到最终结果

代码实现

select b.Name from
(
    select CandidateId, count(*) from Vote
    group by CandidateId
    order by count(*) DESC
    LIMIT 1
) a
left join
Candidate b
on a.CandidateId = b.id

结束语

看完这篇,还有更多知识点分享给你哦,自己慢慢找哈,就在下面链接。


推荐关注的专栏

👨‍👩‍👦‍👦 机器学习:分享机器学习实战项目和常用模型讲解
👨‍👩‍👦‍👦 数据分析:分享数据分析实战项目和常用技能整理

往期内容回顾

💚 学习Python全套代码【超详细】Python入门、核心语法、数据结构、Python进阶【致那个想学好Python的你】
❤️ 学习pandas全套代码【超详细】数据查看、输入输出、选取、集成、清洗、转换、重塑、数学和统计方法、排序
💙 学习pandas全套代码【超详细】分箱操作、分组聚合、时间序列、数据可视化
💜 学习NumPy全套代码【超详细】基本操作、数据类型、数组运算、复制和试图、索引、切片和迭代、形状操作、通用函数、线性代数


关注我,了解更多相关知识!

CSDN@报告,今天也有好好学习

以上是关于牛刀小试 ——《当选者》LeetCode Plus 会员专享题详细解析Hive / MySQL的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode(数据库)- 当选者

[Leetcode] Plus One

一维动态规划小试牛刀

LeetCode Plus One Linked List

Leetcode 66 Plus One STL

Plus One Leetcode