按一个字段分组,然后将结果分组为另一个字段

时间:2018-03-12 16:23:40

标签: mysql sql

我有一个查询,按需要的列分组,所以我得到了我需要的结果,然后我需要返回结果,这应该通过用另一个字段对先前的结果进行分组来完成。 所以基本上我有一个调查表,

 sql = SELECT * FROM Survey S 
       WHERE S.UserId = 79 
       Group By S.SurveyNumber 
       Having SUM (S.Counter) <> 0 ORDER BY S.SubmittedDate DESC 

这将返回按数字分组的调查,然后我需要按SurveyName对结果进行分组,并返回该SurveyName的最后提交的调查(Max(submittedDate))。 我可以使用一个查询来实现这一点吗?如果我有

 GroupBy S.SurveyNumber, S.SurveyName 

然后它会尝试找到两列相同的列。 我该怎么做?

2 个答案:

答案 0 :(得分:0)

这就是我理解这一点:

  1. 每项调查都属于一个用户。您想要对一个特定用户进行调查。
  2. 该表实际上不是 Survey 表(一条记录代表一项调查),而是一种调查年表表。每次调查都有多个记录。
  3. 您必须查看每次调查的所有记录,以了解其是否已付款。
  4. 对于每个付费调查,您需要最后一个年表记录。
  5. 您已经展示了如何检查是否支付了调查费用。现在选择它们的最后日期(最长日期)。基于此,从表中获取相关记录。

    select *
    from survey
    where (surveynumber, submitteddate) in
    (
      select surveynumber, max(submitteddate)
      from survey
      where userid = 79 
      group by surveynumber 
      having sum(counter) <> 0 
    );
    

    我可能错了,因为你听起来像调查号码在某种程度上独立于调查名称。 (一个具有不同名称的调查编号?多个调查编号的调查名称相同?)

    您可以从更好的数据模型中获益,至少有两个单独的表格用于调查和调查详情。

答案 1 :(得分:0)

我认为它有效:

SELECT 
    S2.SurveyName
    ,SUM(S2.Count) as SurveyCount

FROM ( 
    select 
        SUM(S.SurveyNumber) as Count
        ,S.SurveyName 
    FROM Survey S 
    where S.SurveyNumber <> 0 
    Group By S.SurveyNumber,S.SurveyName 
) as S2

Group By S2.SurveyName
相关问题