计算具有单个和多个类别的记录

时间:2018-06-15 00:17:10

标签: mysql sql

我在表格中有这些记录

researchID | category
      19        math
      20        math
      21        math
      22        math
      22        history
      23        math
      23        english
      24        math
      24        english

使用此查询:SELECT researchID,GROUP_CONCAT(DISTINCT category_id SEPARATOR" |")作为类别FROM tbl_submission_categories GROUP BY researchid。我的结果就是这个

 researchID | category
      19        math
      20        math
      21        math
      22        math|history
      23        math|english
      24        math|english

但我想要的结果就是这个

research_count | category
      3           math
      1           math|history
      2           math|english

我需要什么样的SQL查询?

2 个答案:

答案 0 :(得分:0)

您可以通过移动内部子句中的查询并对内部查询的结果集应用聚合来实现此目的

SELECT category, COUNT(*) research_count 
FROM(
    SELECT researchID, GROUP_CONCAT(DISTINCT category_id SEPARATOR "|") as category 
    FROM tbl_submission_categories 
    GROUP BY researchid
) t
GROUP BY category

Demo

答案 1 :(得分:0)

您需要一个额外的子查询:

SELECT category, COUNT(*)
FROM (SELECT researchID,
             GROUP_CONCAT(DISTINCT category_id ORDER BY category_id SEPARATOR '|') as category 
      FROM tbl_submission_categories
      GROUP BY researchid
     ) sc
GROUP BY category;

您会发现与查询有一个重要区别。 GROUP_CONCAT()有一个ORDER BY。这很重要,因为GROUP_CONCAT()不保证结果中的排序。要确保相同的顺序,您需要ORDER BY