【问题标题】:Mysql Query not summing mutliple records, just taking the first record onlyMysql Query不求和多条记录,只取第一条记录
【发布时间】:2012-07-18 20:43:09
【问题描述】:

我们有一个表格(调查),其中包含不同的调查问题。每个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,但这也没有成功。

一如既往地提前致谢。

【问题讨论】:

  • 一方面,您没有在任何地方使用SUMCOUNT。那么您希望聚合如何发生?
  • 分组不会自动累加。使用计数(是)
  • 字段vote_yesvote_not是布尔字段吗?

标签: php mysql


【解决方案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

【讨论】:

    【解决方案2】:

    你根本没有总结。您应该使用像

    这样的聚合函数
    SELECT SUM(vote_survey_table.vote_yes) AS cnt
    

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

    【讨论】:

    • OP 没有告诉我们该字段是否有“1”或无法相加的内容。除此之外,我完全同意这个答案:)
    • 我应该提到,是的,该字段是一个整数字段,其中包含一个计数。谢谢,修复成功了!
    猜你喜欢
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2013-12-30
    相关资源
    最近更新 更多