我是否需要GROUP BY中的此字段不显示重复的行

时间:2013-02-05 18:58:49

标签: mysql sql database

我在下面创建一个查询,根据用户在搜索栏中输入的字词,它会检索数据。现在我要做的是不显示重复数据,所以如果有2行所有字段完全相同,那么它是一个重复行,所以它只显示一次这一行而不是多次。现在我认为这似乎是这样做的,因为我看到没有重复的行,但我所做的只是使用所有SELECT字段进行GROUP BY,除了Answer字段,因为它不允许我在GROUP BY子句中有一个组concat。

但我的问题是,我是否需要GROUP Y子句中的那个字段才能显示重复的行或是否真的不需要?

SELECT
      q.QuestionContent, 
      o.OptionType, 
      q.NoofAnswers, 
      GROUP_CONCAT(DISTINCT Answer ORDER BY Answer SEPARATOR ',') AS Answer, 
      r.ReplyType, 
      q.QuestionMarks
    FROM Question q
    LEFT JOIN Answer an
      ON q.QuestionId = an.QuestionId
    LEFT JOIN Reply r 
      ON q.ReplyId = r.ReplyId 
    LEFT JOIN Option_Table o 
      ON q.OptionId = o.OptionId 
    WHERE ".implode(" AND ", array_fill(0, $numTerms, "q.QuestionContent LIKE ?"))."
    GROUP BY   q.QuestionContent, 
      o.OptionType, 
      q.NoofAnswers, 
      r.ReplyType, 
      q.QuestionMarks
    ORDER BY ".implode(", ", array_fill(0, $numTerms, "IF(q.QuestionContent LIKE ?, 1, 0) DESC"))."

2 个答案:

答案 0 :(得分:1)

我认为DISTINCT可能会更好/更简单:

SELECT
  DISTINCT q.QuestionContent, 

答案 1 :(得分:1)

不,您不需要group_concat()中的selectgroup by将确保group by中的列的任何特定值组合都会出现一次。因为这些保证是不同的,所以您不必担心任何其他列。

group_concat()是基于摘要的计算列。您不能在group by语句中包含此类列。如果要再次聚合它们,则需要使用子查询。