要求:请编写 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);