2016-07-24 2 views
1

У меня есть три таблицы.Добавить столбец в запросе, используя LEFT JOIN

tblcandidates

candidateid  |  candidatename 
1    |  Abc 
2    |  Def 

tbljudges

judgeid   |  judgename 
1    |  Stack 
2    |  Overflow 

tblscores

scoreid   |  candidateid  |  judgeid  |  swimsuit 
1    |  1    |  1   |  100 
2    |  1    |  2   |  99 
3    |  2    |  1   |  100 
4    |  2    |  2   |  93 

Я использую этот запрос получить среднее число каждого кандидата.

SELECT DISTINCT 
    (c.candidateid) AS c, 
    candidatename AS NAME, 
    j1.swimsuit AS j1, 
    j2.swimsuit AS j2, 
    (
     j1.swimsuit + j2.swimsuit 
    )/2 AS average 
FROM 
    tblscores, 
    tblcandidates c 
LEFT JOIN tblscores j1 ON c.candidateid = j1.candidateid 
AND j1.judgeid = 1 
LEFT JOIN tblscores j2 ON c.candidateid = j2.candidateid 
AND j2.judgeid = 2 
WHERE tblscores.candidateid = c.candidateid; 

Выход

c  |  name  |  j1  |  j2  |  average 
1  |  Abc  |  100  |  99  |  99.5 
2  |  Def  |  100  |  93  |  96.5 

Моя проблема в том, что если судьи станут 3. Я хочу, чтобы мой динамический запрос в зависимости от количества судей. Мой запрос ограничивается только двумя судьями. Я также хочу отобразить оценки судей, как в моем выпуске, для доказательства того, что у них есть оценка.

+2

Пожалуйста, поделитесь скриптом sql. Это проблема сводной таблицы MySQL. – 1000111

+0

Как сделать скрипку sql? –

+0

Вот пример [** sql fiddle **] (http://sqlfiddle.com/#!9/3fd52/1/0) – 1000111

ответ

3

Вы заново изобретаете колесо здесь, выполнив средний расчет самостоятельно. Вместо этого вы можете использовать встроенную совокупную функцию MySQL avg. Если вам действительно нужны все оценки, вы можете использовать group_concat, чтобы их отобразить:

SELECT c.candidateid AS id, 
     candidatename AS name, 
     GROUP_CONCAT(swimsuit) AS all_scores, 
     AVG(swimsuit) AS average_score 
FROM  tblcandidates c 
JOIN  tblscores s ON c.candidateid = s.candidateid 
GROUP BY c.candidateid, candidatename 
+0

Извините. Я забыл, что мне приходится отображать все оценки судей. как в моем выпуске. –

+0

@SeeMore В вызове 'group_concat' будут отображаться все отдельные баллы. Если вам нужны они в разных столбцах, у вас нет выбора, кроме как добавлять дополнительные элементы в свой список выбора, как вы делали до сих пор. – Mureinik

+1

хорошо .. Я попробовал. все оценки есть с запятой, спасибо .. Может быть, я просто буду использовать explode, чтобы получить их все в php. Я буду ждать некоторых других ответов, но ваш ответ будет полезен. Спасибо. –

Смежные вопросы