返回介绍

solution / 0500-0599 / 0574.Winning Candidate / README

发布于 2024-06-17 01:03:59 字数 2074 浏览 0 评论 0 收藏 0

574. 当选者

English Version

题目描述

表: Candidate

+-------------+----------+
| Column Name | Type   |
+-------------+----------+
| id      | int    |
| name    | varchar  |
+-------------+----------+
id 是该表中具有唯一值的列
该表的每一行都包含关于候选对象的id和名称的信息。

 

表: Vote

+-------------+------+
| Column Name | Type |
+-------------+------+
| id      | int  |
| candidateId | int  |
+-------------+------+
id 是自动递增的主键(具有唯一值的列)。
candidateId是id来自Candidate表的外键(reference 列)。
该表的每一行决定了在选举中获得第i张选票的候选人。

 

编写解决方案来报告获胜候选人的名字(即获得最多选票的候选人)。

生成的测试用例保证 只有一个候选人赢得 选举。

返回结果格式如下所示。

 

示例 1:

输入: 
Candidate table:
+----+------+
| id | name |
+----+------+
| 1  | A  |
| 2  | B  |
| 3  | C  |
| 4  | D  |
| 5  | E  |
+----+------+
Vote table:
+----+-------------+
| id | candidateId |
+----+-------------+
| 1  | 2       |
| 2  | 4       |
| 3  | 3       |
| 4  | 2       |
| 5  | 5       |
+----+-------------+
输出: 
+------+
| name |
+------+
| B  |
+------+
解释: 
候选人B有2票。候选人C、D、E各有1票。
获胜者是候选人B。

解法

方法一

# Write your MySQL query statement below
SELECT
  Name
FROM
  (
    SELECT
      CandidateId AS id
    FROM Vote
    GROUP BY CandidateId
    ORDER BY COUNT(id) DESC
    LIMIT 1
  ) AS t
  INNER JOIN Candidate AS c ON t.id = c.id;

方法二

# Write your MySQL query statement below
SELECT name
FROM
  Candidate AS c
  LEFT JOIN Vote AS v ON c.id = v.candidateId
GROUP BY c.id
ORDER BY COUNT(1) DESC
LIMIT 1;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文