我得到了这个MySQL面试问题,这使我失去了这份工作的资格。
我去面试,被问到一个我无法回答的问题,结果我失去了工作。
他们问了。
我们有两个表,第一个表(主表)是带有字段的CANDIDATES:
candidate_id (primary_key)candidate_name第二个表(子表)是带有字段的CANDIDATE_VOTES:
v_id (主键)candidate_id (外键)每次投票一次,候选人的candidate_key就会投到孩子身上。
CANDIDATE
=================================
|candidate_id | candidate_Name |
|-------------------------------|
| 1 | abc |
|-------------------------------|
| 2 | xyz |
|-------------------------------|
| 3 | etc |
|-------------------------------| CANDIDATE VOTES
==========================
| votes_id | candidate_id |
|-------------------------|
| 1 | 1 |
|-------------------------|
| 2 | 1 |
|-------------------------|
| 3 | 2 |
|-------------------------| 问题是你怎么宣布胜利者?
请帮我做这件事。
我试了很多次,但找不到逻辑。
发布于 2012-08-29 11:04:36
你应该选出所有得票最多的候选人:
SELECT candidates.*
FROM candidates JOIN candidate_votes USING (candidate_id)
GROUP BY candidate_id
HAVING COUNT(*) = (
SELECT COUNT(*)
FROM candidate_votes
GROUP BY candidate_id
ORDER BY votes DESC
LIMIT 1
)请在木琴上看到。
发布于 2012-08-29 11:00:59
您可以使用COUNT()获取与每个候选人相关的总票数。通过加入这两个表,您可以返回candidate_name,如果在查询中使用LIMIT和ORDER BY,它将只返回确定为胜利者的记录。
SELECT count(*) winner, c.candidate_Name
FROM candidates c
INNER JOIN candidate_votes cv
ON c.candidate_id = cv.candidate_id
GROUP BY c.candidate_Name
ORDER BY winner desc
LIMIT 1 -- remove the LIMIT to see all records请参阅与Demo
或MySQL允许在不在SELECT中的字段上使用GROUP BY
SELECT count(*) winner, , c.candidate_Name
FROM candidates c
INNER JOIN candidate_votes cv
ON c.candidate_id = cv.candidate_id
GROUP BY cv.candidate_id
ORDER BY winner desc
LIMIT 1 -- remove the LIMIT to see all records请参阅与Demo
发布于 2012-08-29 11:05:27
SELECT CANDIDATE_NAME, count(*)
FROM CANDIDATES, CANDIDATE_VOTES
WHERE CANDIDATES.CANDIDATE_ID = CANDIDATE_VOTES.CANDIDATE_ID
GROUP BY CANDIDATE_NAME
ORDER BY count(*) DESC
LIMIT 1选择:选择候选人姓名+票数
出发地:使用两个表
其中:链接表的基本连接
GROUP :将每个候选人名称的选票分组,SELECT中的计数(*)将显示分组为1行(即.a)的行数。每名候选人的票数)
按票数从最高到最低的顺序
限制:只返回1行,删除这一行以查看完整的候选人名单和选票。
https://stackoverflow.com/questions/12176374
复制相似问题