1

我们有一个表格(调查),其中包含不同的调查问题。每个survey_id 在此表中仅出现一次。

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

我正在尝试查询投票表以将给定调查问题的所有投票相加,但我提出的查询仅将投票表中的行的第一个实例相加。

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

我在这个查询中遗漏了什么,应该告诉查询将投票表中的所有调查 ID 实例相加并总结结果?我尝试将 LEFT JOIN 更改为 INNER JOIN,但这也没有成功。

一如既往地提前感谢。

4

2 回答 2

1

你需要对选票求和。

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.

于 2012-07-18T20:46:36.450 回答
1

你根本没有总结。您应该使用聚合函数,例如

SELECT SUM(vote_survey_table.vote_yes) AS cnt

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

于 2012-07-18T20:47:37.457 回答