Я пытаюсь получить сводную таблицу из временной таблицы (table1) с этими столбцами:
student percent_correct exam_id
student1 100 2
student1 93 3
student1 87 4
student2 93 2
student2 67 3
student2 67 4
student3 100 3
Получить
student exam2 exam3 exam4
student1 100 93 87
student2 93 67 67
student3 - 100 -
Прочитав несколько сообщений здесь, я использовал этот код, и я получаю результат cero, пожалуйста, прочитайте комментарии:
SET @sql_dynamic = (
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(IF(exam_id = ''',
exam_id,
''', percent_correct, 0)) AS exam',
exam_id
))
FROM table1); # MySQL returned 0 columns
SET @sql = CONCAT('SELECT student, ',@sql_dynamic,' FROM table1'); # MySQL returned 0 columns
PREPARE stmt FROM @sql; # MySQL returned 0 columns
EXECUTE stmt; # MySQL returned 1 row
DEALLOCATE PREPARE stmt; # MySQL returned 0 columns
Я не знаю, как получить эту таблицу.
Использовать условную агрегацию
select student,
max(case when exam_id = 2 then percent_correct end) exam2,
max(case when exam_id = 3 then percent_correct end) exam3,
max(case when exam_id = 4 then percent_correct end) exam4
from your_table
group by student