【问题标题】:How do I group a MySQL query by two different columns?如何按两个不同的列对 MySQL 查询进行分组?
【发布时间】:2015-02-24 22:10:37
【问题描述】:

我正在研究的问题是:

提供按省份和问题细分的问题的平均答案。您必须包括省份和问题以及平均值。

示例输出看起来像这样:

 Ontario - Do you like blak? - 3.4
 Ontario - Do you like flah? - 2.3
 Ontario - Do you like rahhggg? - 4.8
 Alberta - Do you like flah? - 2.3
 Alberta - Do you like rahhggg? - 4.8

到目前为止,我已尝试按问题将它们与平均值一起列出,但我不知道如何首先按省份对其进行分组。我认为这是一个 JOIN,但我不知道如何布局。我有什么:

SELECT survey_question_id, AVG(survey_response)
FROM survey_responses
JOIN survey_responders 
ON survey_responses.id = survey_responders.id
WHERE survey_responders.province='Ontario'
GROUP BY survey_question_id;

【问题讨论】:

    标签: mysql group-by


    【解决方案1】:
    SELECT province,survey_question_id, AVG(survey_response)
    FROM survey_responses
    JOIN survey_responders 
    ON survey_responses.id = survey_responders.id
    WHERE survey_responders.province='Ontario'
    GROUP BY province,survey_question_id;
    

    如果您需要所有省份,只需像这样删除Where

    SELECT province,survey_question_id, AVG(survey_response)
    FROM survey_responses
    JOIN survey_responders 
    ON survey_responses.id = survey_responders.id
    GROUP BY province,survey_question_id;
    

    【讨论】:

    • 您还需要在 select 子句中添加province
    • 已修复,谢谢@JNevill
    • 我必须将省份分组,好像有很多不同的地方一样。此解决方案是否仅适用于安大略省?
    • 可以,但是你只需要删除WHERE survey_responders.province='Ontario'子句
    • 哦,我明白了,谢谢 :)
    【解决方案2】:

    MySQL 中的 GROUP BY 语句确定查询引擎如何聚合数据。您目前仅按survey_question_id 分组。由于 id 都会不同,因此您永远不会在结果中得到汇总。

    我建议将您的组更改为:

    GROUP BY survey_responders.province, survey_responses.questiontitle 
    

    并确保您适当地编辑您的 SELECT 语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-05
      • 1970-01-01
      • 1970-01-01
      • 2014-01-25
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 2022-07-28
      相关资源
      最近更新 更多