У меня возникают трудности при создании сводной таблицы из таблицы данных в SQL, так как я продолжаю получать одно и то же сообщение об ошибке и не понимаю, почему.
Моя исходная таблица имеет следующую форму (япросто отфильтруйте те, которые я буду использовать):
== ID == | == Category == | == Description == | == ...
ID1 | Category_A | Description_1 | ...
ID2 | Category_B | Description_2 | ...
ID3 | Category_C | Description_3 | ...
ID3 | Category_A | Description_4 | ...
ID1 | Category_B | Description_2 | ...
ID4 | Category_C | Description_3 | ...
ID5 | Category_A | Description_1 | ...
ID2 | Category_A | Description_1 | ...
ID2 | Category_A | Description_4 | ...
ID5 | Category_B | Description_2 | ...
ID4 | Category_B | Description_6 | ...
ID4 | Category_C | Description_7 | ...
Это таблица, в которой каждая строка представляет описание события для определенного идентификатора. Существует много описаний событий для данного идентификатора, поэтому идентификатор может появляться в нескольких строках. Столбец Категория - это просто категория описания события.
Из этой таблицы моя конечная цель - получить что-то вроде этого:
== ID == | == Description_1 == | == Description_2 == | == Description_3 == | = ...
ID1 | 1 | 2 | 2
ID2 | 0 | 1 | 1
ID3 | 2 | 0 | 1
ID4 | 0 | 1 | 2
ID5 | 0 | 3 | 0
Существуют тысячи различных идентификаторов и сотниразных описаний.
Вот код, который я пробовал:
WITH agg_table AS (
SELECT ID, Description, COUNT(*) as description_count
FROM original_table
WHERE Category IN ('Category_A', 'Category_B', 'Category_D')
GROUP BY ID, Description
ORDER BY ID
)
SELECT *
FROM agg_table
PIVOT (
SUM(description_count)
FOR Description IN (SELECT DISTINCT Description
FROM original_table
WHERE Category IN ('Category_A', 'Category_B', 'Category_D'))
) AS pivot_table
Из исходной таблицы я группирую по идентификатору и описанию, чтобы получить таблицу из 3 столбцов, где в каждой строке указано количество разописание конкретного события происходит для определенного идентификатора (я также фильтрую, чтобы получить только определенные категории ..). Затем я использую функцию pivot, чтобы повернуть таблицу и получить то, что я хотел бы получить: таблицу, в которой у меня есть одна строка для каждого идентификатора, и каждый столбец представляет событие описания со значением ячейки, указывающей, сколько раз происходит описаниедля данного идентификатора.
Проблема в том, что я получаю следующее сообщение об ошибке:
Error in SQL statement: ParseException: mismatched input 'FROM' expecting <EOF>(line 1, pos 9)
Я действительно не знаю, в чем проблема в коде. Я где-то читал, что это может быть вызвано псевдонимами, но даже без написания псевдонимов у меня все еще есть проблема.
Не знаю, как это повлияет на мой случай, но я использую блоки данных с Spark 2.4.3, Scala 2.11
Заранее спасибо за ваше время. И, пожалуйста, дайте мне знать, если что-то неясно, чтобы я мог привести больше деталей.
Хорошего дня!