Когда я отправляю этот запрос (из курса codeacademy), я получаю два столбца customer_id и не могу понять, почему и как удалить столбец дубликата?
WITH previous_results AS (
SELECT customer_id, COUNT(customer_id) FROM orders
GROUP BY customer_id
)
SELECT * FROM previous_results
JOIN customers
ON previous_results.customer_id = customers.customer_id;
Потому что SELECT * выбирает все столбцы из всех таблиц в запросе
Вы используете SELECT *, а Customer_ID существует как в вашем CTE «previous_results», так и в таблице клиентов. SELECT * вернет все столбцы из обоих. Укажите имена столбцов.
Причина, по которой вы получаете два столбца customer_id в результатах запроса, заключается в том, что вы выбираете все столбцы как из таблиц previous_results, так и из таблиц customers. Поскольку в обеих таблицах есть столбец customer_id, вы получите два столбца с одинаковыми именами.
Чтобы удалить повторяющийся столбец customer_id, вам нужно явно указать столбцы, которые вы хотите выбрать, и исключить один из столбцов customer_id. При необходимости можно использовать ключевое слово SQL AS для переименования выбранных столбцов.
Вот обновленная версия вашего запроса, которая выбирает только необходимые столбцы и переименовывает их, чтобы избежать повторяющихся имен столбцов:
WITH previous_results AS (
SELECT customer_id, COUNT(customer_id) AS order_count
FROM orders
GROUP BY customer_id
)
SELECT customers.customer_id, customers.name, previous_results.order_count
FROM previous_results
JOIN customers ON previous_results.customer_id = customers.customer_id;
В этой версии мы выбираем только столбцы customer_id и name из таблицы клиентов, а также столбцы customer_id и order_count из подзапроса previous_results. Мы также используем ключевое слово AS, чтобы переименовать столбец COUNT(customer_id) в order_count, что упрощает чтение результата запроса.
не ленись. Не используйте * — укажите столбцы явно