首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL面试,这使我失去了这份工作的资格

MySQL面试,这使我失去了这份工作的资格
EN

Stack Overflow用户
提问于 2012-08-29 10:57:17
回答 4查看 4.9K关注 0票数 5

我得到了这个MySQL面试问题,这使我失去了这份工作的资格。

我去面试,被问到一个我无法回答的问题,结果我失去了工作。

他们问了。

我们有两个表,第一个表(主表)是带有字段的CANDIDATES

  • candidate_id (primary_key)
  • candidate_name

第二个表(子表)是带有字段的CANDIDATE_VOTES

  • v_id (主键)
  • candidate_id (外键)

每次投票一次,候选人的candidate_key就会投到孩子身上。

CANDIDATE

代码语言:javascript
复制
=================================     
|candidate_id | candidate_Name  |  
|-------------------------------|  
| 1           | abc             |  
|-------------------------------|  
| 2           | xyz             |  
|-------------------------------|  
| 3           | etc             |  
|-------------------------------|  

CANDIDATE VOTES

代码语言:javascript
复制
==========================     
| votes_id | candidate_id |  
|-------------------------|  
| 1        | 1            |  
|-------------------------|  
| 2        | 1            |  
|-------------------------|  
| 3        | 2            |  
|-------------------------| 

问题是你怎么宣布胜利者?

请帮我做这件事。

我试了很多次,但找不到逻辑。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-29 11:04:36

你应该选出所有得票最多的候选人:

代码语言:javascript
复制
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
)

请在木琴上看到。

票数 8
EN

Stack Overflow用户

发布于 2012-08-29 11:00:59

您可以使用COUNT()获取与每个候选人相关的总票数。通过加入这两个表,您可以返回candidate_name,如果在查询中使用LIMITORDER BY,它将只返回确定为胜利者的记录。

代码语言:javascript
复制
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

代码语言:javascript
复制
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

票数 2
EN

Stack Overflow用户

发布于 2012-08-29 11:05:27

代码语言:javascript
复制
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行,删除这一行以查看完整的候选人名单和选票。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12176374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档