Может ли ChatGPT писать SQL лучше, чем Data Analyst?
Я попробовал ChatGPT , вариант языковой модели GPT-3, специально разработанный для создания человеческого текста в диалоговом контексте. И, конечно же, как и большинство из нас, я задавался вопросом: может ли ИИ выполнять мою работу? И может ли он сделать это лучше меня?
У меня 2 года опыта работы аналитиком данных и инженером-аналитиком. По данным BBC Science Focus , ChatGPT принял 570 ГБ данных. Так кто лучше пишет SQL?
Давайте играть!
Эта игра будет основана на 3 задачах LeetCode SQL (одна легкая, две средние). Сначала я напишу каждое решение, а затем отправлю упражнение в ChatGPT и посмотрю, какое решение работает лучше всего.
Я предоставлю ссылки на каждое испытание, чтобы вы тоже могли попробовать победить ChatGPT.
Вызов 1 (легкий)
Эта задача называется « Клиент, размещающий наибольшее количество заказов» .
Вот запрос, который я написал:
WITH layer_1 AS (
SELECT
customer_number, COUNT(DISTINCT order_number) AS order_number
FROM orders
GROUP BY customer_number
)
SELECT customer_number
FROM layer_1
ORDER BY order_number DESC
LIMIT 1
Теперь давайте посмотрим, как ChatGPT работает с этим.
Вот что ответил ChatGPT:
ChatGPT даже объясняет, что он сделал. Я не нахожу запрос очень удобочитаемым — одна из причин, почему я люблю общие табличные выражения, — это удобочитаемость — но давайте посмотрим, как он работает.
Впечатляет, работает, но медленнее моего результата. Хотя я рад работать лучше, чем ChatGPT, мне бы очень хотелось узнать, как я могу улучшить этот запрос.
Вызов 2 (средний)
Следующая задача называется Tree Node .
Первый запрос, который я написал, был таким:
# Write your MySQL query statement below
WITH l1 AS (
SELECT
t.id,
c.id AS c_id,
t.p_id
FROM Tree t
LEFT JOIN Tree c
ON c.p_id = t.id
),
l2 AS (
SELECT
id,
COUNT(DISTINCT c_id) AS nb_childrens,
COUNT(DISTINCT p_id) AS nb_parents
FROM l1
GROUP BY id
)
SELECT id,
CASE
WHEN nb_childrens >0 AND nb_parents >0 THEN "Inner"
WHEN nb_childrens > 0 THEN "Root"
ELSE "Leaf"
END AS type
FROM l2
Оказывается, я не уделил должного внимания примерам, особенно второму:
Когда узел одновременно является и листом, и корнем, он должен выводиться как корень. Я изменил порядок своего CASE WHEN на это:
CASE
WHEN nb_childrens >0 AND nb_parents >0 THEN "Inner"
WHEN nb_parents > 0 THEN "Leaf"
ELSE "Root"
END
Мой запрос получил средний результат:
Время для ChatGPT играть в игру!
ChatGPT прочитал все примеры и не сделал моей ошибки на узлах, которые являются одновременно корнем и листом:
Но он все равно дал мне неправильный ответ:
ChatGPT не возвращал одну строку для каждого идентификатора.
Поэтому я решил дать ChatGPT подсказку:
И это удалось исправить!
Мы оба допустили ошибку в этом челлендже и оба смогли ее исправить (хотя мне пришлось дать подсказку ChatGPT). У меня был немного лучший результат с точки зрения времени выполнения, так что это мое мнение, но это было близко!
Вызов 3 (средний)
Последняя задача называется « Прибыль/убыток капитала» .
Вот запрос, который я написал:
SELECT
stock_name,
SUM(
CASE
WHEN operation = "Buy" THEN -1*price
ELSE price
END
)
AS capital_gain_loss
FROM Stocks
GROUP BY stock_name
Screenshot by Author
Давайте посмотрим, является ли ChatGPT одним из них.
Давайте попробуем это решение:
Опять же, он получает неправильный результат. ChatGPT объединяет одну покупку с каждой будущей продажей, а не только соответствующей, поэтому его решение работает только в том случае, если есть только одна пара операций покупки/продажи.
Я попытался сказать ChatGPT исправить свою ошибку, не давая ему подсказки:
К сожалению, это дает мне точно такой же запрос. Поэтому я пожаловался:
На этот раз мы с ChatGPT использовали аналогичную структуру, и запрос прошел. Однако я не уверен, что ChatGPT действительно понимал, что он сделал неправильно.
Время выполнения ChatGPT немного хуже, чем у меня.
Результаты
Challenge ChatGPT Data Analyst Winner
----------- --------------- --------------------- ---------------------
1 ✅ (22%) ✅ (62%) Data Analyst
2 ❌ ✅ (36%) ❌ ✅ (54%) Data Analyst
3 ❌ ❌ ✅ (8%) ✅ (5%) Data Analyst
Но он все равно ошибся на 50%. И даже если бы он успешно справился со всеми задачами, я бы не беспокоился о своей работе. Заинтересованные стороны никогда не приходят к аналитикам с таким четко определенным запросом и примерами результатов. Они приходят с бизнес-вопросом, и нам нужно подумать о том, как лучше всего ответить на него, используя имеющиеся данные. Может ли ChatGPT сделать это?
Я спросил у ChatGPT его мнение по этому поводу:
Вот и все!
Надеюсь, вам понравилась эта статья! Если вы это сделали, пожалуйста, подпишитесь на меня для получения дополнительной информации по SQL и анализу данных.

![В любом случае, что такое связанный список? [Часть 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































