order by位于计算字段上,该字段在mySql中也具有组_concat

order by位于计算字段上,该字段在mySql中也具有组_concat,mysql,database,sql-order-by,group-concat,Mysql,Database,Sql Order By,Group Concat,这是我试图完成的一个简化版本。假设我有一个person表和一个tests表。每个测试有2个相关分数,每个人可以有0、1或多个测试 人 -人格(PK) -人名 测试 -testId(PK) -PersonId(FK) -test1Score -test2Score 我试图得到一个结果集,给我一个排序列表的人和平均测试分数。这就是我所做的 SELECT GROUP_CONCAT( CASE WHEN( tests.test1Score > 0 ) THEN( ( te

这是我试图完成的一个简化版本。假设我有一个person表和一个tests表。每个测试有2个相关分数,每个人可以有0、1或多个测试


-人格(PK)
-人名

测试
-testId(PK)
-PersonId(FK)
-test1Score
-test2Score

我试图得到一个结果集,给我一个排序列表的人和平均测试分数。这就是我所做的

SELECT GROUP_CONCAT( CASE  
    WHEN( tests.test1Score > 0 )   
    THEN( ( tests.test1Score + tests.test2Score)/2 )  
    ELSE( 99999999 ) END) as averageScore, person.PersonName  
FROM person  
JOIN tests  
    ON person.personId = tests.personId   
GROUP BY person.personId   
ORDER BY averageScore
所发生的事情是,group_concat返回一个字符串,并执行我的order by结果如下

人名1 | 5,6
人名2 | 51,60
人名3 | 6,60

我知道我必须先按单个计算字段排序,然后按组_连接值排序,但不确定如何排序


如果有任何帮助,我们将不胜感激。

您可以使用聚合子查询来完成此操作,并根据您喜欢的任何字段分组,而不是在连接的字符串上分组。使用字段的示例:

SELECT person.personID, person.personName, p.AvgOftest1score, p.AvgOftest2score
FROM person
INNER JOIN
(
SELECT personID, Avg(test1score) AS AvgOftest1score, Avg(test2score) AS AvgOftest2score
FROM tests
GROUP BY personID
) p
ON person.personID = p.personID
ORDER BY p.AvgOftest1score, p.AvgOftest2score;

您是否必须使用group_concat来完成此任务?您预期的结果是什么?你想按分数排序吗?@kermit是的。。我正在使用group_concat以逗号分隔的列表形式获取结果。@ilight-yup。。按分数排序。感谢您的示例,但它表明您可以使用现有字段进行订购。。在我的情况下,我需要按计算字段订购..同意。。但我需要的结果是在上述格式。。在您的示例中,AvgOftest1score和AvgOftest2score是两个不同的字段。。我希望它们以逗号分隔(因此使用GROUP_CONCAT)。