我在表格中有这些记录
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查询?
答案 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
答案 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
。