MySQL запрос на вывод данных с заголовками столбцов из таблицы

0

Есть ли способ в SQL получить данные, показанные в левой таблице, для вывода, как на рисунке справа?

Изображение 174551

Теги:

1 ответ

1

Если у вас есть конечный статический список тестов, и ни один пользователь не проходит тест более одного раза, вы можете сделать это следующим образом:

SELECT UserID, 
       SUM(Result * (Unit = "Test 1")) AS "Test 1",
       SUM(Result * (Unit = "Test 2")) AS "Test 2",
       SUM(Result * (Unit = "Test 3")) AS "Test 3" 
FROM table
GROUP BY UserID;

Это работает, используя SUM для GROUP как взвешенную сумму всех записей с весом 1 для строки с соответствующим тестом и 0 для всех других строк (сравнение оценивается как 1 для TRUE и 0 для FALSE).

редактировать

Как отметил @Nick в своем комментарии, вы можете пойти более читабельным и менее зависящим от реализации способом, используя CASE вместо стиля умножения на логическое значение:

SELECT UserID, 
       SUM(CASE WHEN Unit = "Test 1" THEN Result ELSE 0 END) AS "Test 1",
       SUM(CASE WHEN Unit = "Test 2" THEN Result ELSE 0 END) AS "Test 2",
       SUM(CASE WHEN Unit = "Test 3" THEN Result ELSE 0 END) AS "Test 3"
FROM table
GROUP BY UserID;
  • 2
    SUM(CASE WHEN Unit = 'Test 1' THEN Result ELSE 0 END) AS `Test 1` является более традиционным и не полагается на логическое значение, рассматриваемое как 1 или 0.
  • 0
    Я согласен, вы правы, и это, вероятно, лучше оптимизировать тоже. Не думал, что далеко :-)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню