Предположим, вы уже сделали: CREATE EXTENSION tablefunc;
Тогда, чтобы достичь желаемого с помощью функции crosstab (), тогда:
SELECT *
FROM crosstab('SELECT wrong_response,
correct_answer,
count(*)
FROM fruit
GROUP BY wrong_response, correct_answer
ORDER BY wrong_response',
'SELECT correct_answer
FROM fruit
GROUP BY correct_answer
ORDER BY correct_answer')
AS (wrong_answer varchar(20),
apple bigint,
banana bigint,
pear bigint);
Выше код даст вам следующий результат, который вы хотите:
Обратите внимание, что здесь 0 выводится как ноль, чтобы получить именно то, что вы хотите, вам просто нужно немного изменить select
:
SELECT
wrong_answer,
coalesce(apple, 0) as apple,
coalesce(banana, 0) as banana,
coalesce(pear, 0) as pear
FROM crosstab('SELECT wrong_response,
correct_answer,
count(*)
FROM fruit
GROUP BY wrong_response, correct_answer
ORDER BY wrong_response',
'SELECT correct_answer
FROM fruit
GROUP BY correct_answer
ORDER BY correct_answer')
AS (wrong_answer varchar(20),
apple bigint,
banana bigint,
pear bigint)
Выше вы получите то, что хотите: