mysql - leetcode 574 获胜候选查询
问题描述
错误截图请看图片
表:候选人
+-----+---------+
| id | Name |
+-----+---------+
| 1 | A |
| 2 | B |
| 3 | C |
| 4 | D |
| 5 | E |
+-----+---------+
表:投票
+-----+--------------+
| id | CandidateId |
+-----+--------------+
| 1 | 2 |
| 2 | 4 |
| 3 | 3 |
| 4 | 2 |
| 5 | 5 |
+-----+--------------+
id is the auto-increment primary key, CandidateId is the id appeared in Candidate table.
写一个sql查找获胜候选人的名字,上面的例子会返回获胜者B。
+------+
| Name |
+------+
| B |
+------+
注意:您可以假设没有平局,换句话说,最多只有一个获胜的候选人。
为什么这段代码不能工作?尝试无限制地使用
SELECT c.Name AS Name
FROM Candidate AS c
JOIN
(SELECT r.CandidateId AS can, MAX(r.Total_vote) AS big
FROM (SELECT CandidateId, COUNT(id) AS Total_vote
FROM Vote
GROUP BY CandidateId) AS r) AS v
ON c.id = v.can;
解决方案
SELECT c.Name AS Name
FROM Candidate AS c JOIN (SELECT r.CandidateId AS can
FROM
(SELECT CandidateId, COUNT(id) AS Total_vote
FROM Vote
GROUP BY CandidateId) AS r
WHERE r.Total_vote = (SELECT MAX(r.Total_vote) FROM (SELECT
CandidateId, COUNT(id) AS Total_vote
FROM Vote
GROUP BY CandidateId) r)) AS v
ON c.id = v.can;
这是更新的代码
我的代码有两个错误。第一个是“如果选择列表中有任何非聚合列,则使用像 Max 这样的聚合需要 Group By 子句”,但不知道为什么我以前的代码仍然可以运行并且没有显示错误。也许系统在运行时会自动添加分组功能。
第二个是 max 不能以这种格式与 Group by 一起使用。
推荐阅读
- spring - Spring Security“记住我”cookie在浏览器关闭事件中被删除
- ios - 推送通知不适用于带有 APNS 的 iOS 和解析云功能(云功能与 android 一起工作......)
- c# - 如何使用依赖注入模式在 .Net Core 中的两个 IHostBuilder 实例之间共享服务?
- java - getSubimage 让我期待 null
- excel - 未定义用户定义类型 - 来自自定义类模块
- python - 如何从 Pandas 数据框中检索在其中一列末尾包含特定值的记录序列?
- jquery - Jquery 数据表搜索和显示条目在我的表的左侧
- angular - 离子 4 @mauron85/cordova-plugin-background-geolocation
- updates - 使用 Dexie,如何从表中所有对象的数组字段中删除一个值?
- c++ - 在文本文件中使用 getline 处理字符串的 C++ 问题