MySQL:对GROUP_CONCAT值进行排序


182

简而言之:有什么方法可以对GROUP_CONCAT语句中的值进行排序吗?

查询:

GROUP_CONCAT((SELECT GROUP_CONCAT(parent.name SEPARATOR " » ") 
FROM test_competence AS node, test_competence AS parent 
WHERE node.lft BETWEEN parent.lft AND parent.rgt 
  AND node.id = l.competence 
  AND parent.id != 1 
ORDER BY parent.lft) SEPARATOR "<br />\n") AS competences

我得到这一行:

工艺品»细木工

行政管理»组织

我想要这样:

行政管理»组织

工艺品»细木工


Answers:


388

当然,请参见http://dev.mysql.com/doc/refman/...tions.html#function_group-concat

SELECT student_name,
  GROUP_CONCAT(DISTINCT test_score ORDER BY test_score DESC SEPARATOR ' ')
  FROM student
  GROUP BY student_name;

您的代码非常依赖您的特定答案,因此不应将其放置在原始帖子之外的任何位置。如果您在此发表评论,这里的许多程序员都不会看到它,也不会得到最好的响应:)
Sampson

悲伤但真实。:)该代码是否足够,还是我应该编写整个查询?
伊瓦(Ivar)2009年

您尝试使用ASC而不是DESC吗?
桑普森2009年

我没有使用任何一个(ASC =默认值)。
伊瓦(Ivar)2009年

10
直到这个确切的时刻,我才知道您可以order by在一个group_concat短时间内完成。解决我遇到的问题。谢谢!
DiMono

22

您是要订购吗?

SELECT _key,            
COUNT(*) as cnt,            
GROUP_CONCAT(_value ORDER BY _value SEPARATOR ', ') as value_list      
FROM group_concat_test      
GROUP BY _key      
ORDER BY _key;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.