2

これが私が達成しようとしていることの単純化されたバージョンです。人のテーブルとテストのテーブルがあるとします。各テストには2つのスコアが関連付けられており、各人は0、1、または多数のテストを行うことができます

person
-PersonId(PK)
-PersonName

テスト
-testId(PK)
-PersonId(FK)
-test1Score
-test2Score

ソートされた人のリストと平均testScoresを提供する結果セットを取得しようとしています。これは私がしていることです

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は文字列を返し、次のような結果で注文を実行します

personName1 | 5,6
personName2 | 51,60
personName3 | 6、60

最初に個々の計算フィールドで並べ替えてから、group_concatenated値で並べ替える必要があることはわかっていますが、その方法がわかりません。

助けていただければ幸いです

4

1 に答える 1

0

集計サブクエリでこれを行い、連結された文字列ではなく、好きなフィールドでグループ化できます。フィールドを使用した例:

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;
于 2012-12-09T05:34:10.810 に答える