Комментарии 11
SELECT customer_id, product, amount FROM sales GROUP BY customer_id;
а тут точно ошибка?
Да. То что некоторые базы данных разрешают такое - нарушение стандарта.
А аналитикам не доступно базовое понимание построения SQL запросов? Или там теперь без знаний вообще берут?
Недоступно, увы. Тут имеется не одна и не две статьи класса "SQL для аналитика", написанные аналитиками - все, как под копирку...
По-моему, аналитики в SQL напоминают тех самых слепцов, которые на ощупь пытались понять, что есть слон.
Не то чтобы берут, но пытаются придти. Наверное, три четверти собеседований с кандидатами заканчивается словами "не смог в SQL".
Записки джуна составленные из ответов гпт?
Среди логических ошибок забыли еще один подкласс - недетерминированный результат. Это когда от запуска к запуску результат может различаться, хотя ни данные, ни запрос не изменились.
Возникает обычно из-за отсутствия явно указанной сортировки или при указании неполного набора полей для сортировки.
SELECT
*
FROM
sales
JOIN
customers;
Не во всех СУБД это ошибочный запрос, если реально нужно декартово произведение.
а кое где это будет соединение по ключу (если он есть)
Ну и то, и другое опять-таки расширение синтаксиса в конкретной СУБД, отклонение от стандарта. JOIN - это сокращённая форма INNER JOIN, и наличие ON clause по стандарту обязательно. Автоподстановка ON TRUE
для получение декартова произведения или ON t1.pk1 = t2.pk2
для связывания по первичному ключу - это фичи конкретных диалектов.
На самом деле типов ошибок всего три.
Алгоритмическая - неправильно выбран алгоритм получения конечного результата. Проблема, например, неправильно выбранного типа связывания - обычно именно отсюда. Экзотика, вроде неправильно выбранных исходных данных (и такое бывает) - тоже отсюда.
Логическая - неправильно реализован правильно выбранный алгоритм. например, проблема неправильно выбранного типа связывания - может быть и отсюда.
Синтаксическая - сформирован некорректный SQL-текст. Начиная от опечаток и кончая просто незнанием правильного синтаксиса в конкретном диалекте SQL.
Проблемы с правами доступа и производительностью вообще не являются ошибками SQL.
А "ошибки работы с NULL", использование некорректного общего синтаксиса и прочие проблемы того же рода - это просто незнание основ, ну или другими словами безграмотность в соответствующей области знаний.
Ошибки, которые можно избежать в SQL: грабли начинающего аналитика