LeetCode:Database 15.当选者

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

表: 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.

注意:

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

分析:
1.要找到当选者的姓名,首先需要找到选票最多的侯选人id
2.通过候选人id找到当选人姓名

SQL语句:

#1.方法1
SELECT NAME FROM candidate
WHERE id IN(
SELECT candidateid FROM(
SELECT candidateid,dense_rank() over(ORDER BY c1 DESC)AS r FROM(
SELECT DISTINCT candidateid,COUNT(*) over(PARTITION BY candidateid )AS c1
FROM vote)a)b
WHERE r=1);
#2.方法2
SELECT NAME FROM candidate
WHERE id =(
SELECT candidateid FROM vote GROUP BY candidateid ORDER BY COUNT(*) DESC LIMIT 1);

你可能感兴趣的:(LeetCode,mysql)