Mysql查询不求和多条记录,只取第一条记录

问题描述:

我们有一个表(调查),它有不同的调查问题。每个survey_id在此表中只出现一次。Mysql查询不求和多条记录,只取第一条记录

我们有一张投票表(vote_survey_table),它记录每个调查问题的用户投票。该表的字段为survey_id,vote_yes,vote_no,user_id等。此表对于每个survey_id都有多个条目。

我想要查询投票表来合计一个给定的调查问题的所有投票,但查询我只提出行int他投票表的第一个实例。

SELECT survey.survey_id, vote_survey_table.vote_yes AS cnt, 
survey.survey_name, survey.survey_details 
FROM survey 
LEFT JOIN vote_survey_table AS votedb ON vote_survey_table.vote_survey_id = survey.survey_id 
GROUP BY survey.survey_id 
ORDER BY cnt DESC, survey.survey_id LIMIT 0,5 

我在这个查询中缺少什么,应该告诉查询在投票表中添加survey_id的所有实例并总结结果?我试着将LEFT JOIN改为INNER JOIN,但是这也没有办法。

一如既往地提前致谢。

+0

一件事,你不使用'SUM'或'COUNT'任何地方。那么你如何期待聚合发生? – RedFilter 2012-07-18 20:45:33

+0

分组不自动加起来。使用计数(是) – Alfabravo 2012-07-18 20:45:58

+0

字段是'vote_yes'和'vote_not'布尔字段吗? – 2012-07-18 21:00:36

您需要对选票进行总结。

SELECT survey.survey_id, SUM(vote_survey_table.vote_yes) AS cnt, 
     survey.survey_name, survey.survey_details 
FROM survey LEFT JOIN vote_survey_table AS votedb 
       ON vote_survey_table.vote_survey_id = survey.survey_id 
GROUP BY survey.survey_id, survey.survey_name, survey.survey_details 
ORDER BY cnt DESC, survey.survey_id LIMIT 0,5 

如果vote_yes是一个布尔字段,然后使用COUNT代替SUM

+0

感谢你这样做......它做到了。我知道我错过了一些显而易见的事情...... – Kevin 2012-07-18 20:59:23

你根本没有总结。您应该使用聚合函数一样

SELECT SUM(vote_survey_table.vote_yes) AS cnt 

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

+0

OP没有告诉我们该领域是否有'1'或者不能加起来的东西。除此之外,我完全同意这个答案:) – Alfabravo 2012-07-18 20:49:26

+0

我应该提到的是,该字段是一个整数字段,其中包含一个计数。谢谢,修复工作! – Kevin 2012-07-18 20:58:47