MySQL - Group BY GROUP_CONCAT

时间:2013-05-11 13:24:13

标签: mysql sql group-by aggregate group-concat

我有以下查询:

SELECT
     issue.`sequence` AS issue_sequence,
     issue.`description` AS issue_description,
     GROUP_CONCAT(DISTINCT(issue_category.`name`) SEPARATOR ', ') AS issue_category_name,
     GROUP_CONCAT(DISTINCT(approach.`name`) SEPARATOR ', ') AS approach_name,
     issue_approach.`issue_id` AS issue_approach_issue_id,
     issue_approach.`approach_id` AS issue_approach_approach_id
FROM
     `approach` approach 
     INNER JOIN `issue_approach` issue_approach ON approach.`id` = issue_approach.`approach_id`
     INNER JOIN `issue` issue ON issue_approach.`issue_id` = issue.`id`
     INNER JOIN `project` project ON issue.`project` = project.`id`
     INNER JOIN `tenant` tenant ON project.`tenant_id` = tenant.`id`
     INNER JOIN `issue_category` issue_category ON project.`id` = issue_category.`project`
     INNER JOIN `user` user ON tenant.`id` = user.`tenant_id`
WHERE user.id = 1 AND project.id = 1
GROUP BY issue_category_name
ORDER BY issue_category.`name`, issue.`sequence`

我遇到这条线的问题:

GROUP BY issue_category_name

显然,MySQL似乎不能通过GROUP_CONCAT结果的别名进行分组。 我不是SQL的专家,但有没有办法可以使用GROUP_CONCAT的结果进行分组?

样本数据;

分类:网络,服务器 问题ID:1 描述:一些描述 方法:解决问题的一些方法。

基本上,问题可能属于一个或多个类别。我正在为每个问题连接类别。我想要做的是根据类别的连接对结果进行分组。例如,类别为网络,服务器的组问题。

感谢。

2 个答案:

答案 0 :(得分:4)

我不是MySQL用户,但将您的论坛更改为

 Group By GROUP_CONCAT(DISTINCT(issue_category.`name`) SEPARATOR ', ')

答案 1 :(得分:2)

参考SQL EXECUTION ORDER,这不起作用的原因是因为select语句是要执行的最后一个语句,因此在将记录分组为GROUP BY时,sql引擎将不知道您的列别名在SELECT之前。因此,正如Charles Bretana的回答所暗示的那样,把

Group By GROUP_CONCAT(DISTINCT(issue_category.`name`) SEPARATOR ', ')

在你的group by子句中。它会正常工作。

希望这会对你有所帮助。