Советы начинающему аналитику (aka How to SQL) будут под этим постом
Кому не интересно, извините за спам, можете заглушить тэг #SQLtips
Критика и ценные замечания приветствуются, готов вносить правки.
8 comments
3. Не присоединяйте таблицу с помощью left join, чтобы затем отфильтровать значения в ней в where. 4. Не используйте union, если нет необходимости избавиться от дублей. union all сильно выигрывает по производительности и показывает читающему код, что дублей в результатах не ожидается. 5. Когда присоединяете таблицу не по её первичному ключу и не хотите получить мультипликацию, заранее подумайте над обработкой дублей. Будущий "вы" поблагодарит "вас" сегодняшнего. 6. Иногда можно избавиться от case when с помощью функций least, greatest и других (зависят от языка). Это хорошо работает и чаще лучше читается. Прочитайте о доступных вам функциях хотя бы один раз, чтобы где-то осели знания типа "так можно". Не обязательно учить их синтаксис, важно знать о существовании. 7. Если часто выполняете запрос, его можно сохранить как представление (create view). 10. Не стесняйтесь писать комментарии в не очевидных местах, даже если вам кажется, что код никто не читает. Они пригодятся вам же лет через 5, а если с кодом будут работать коллеги или заказчики - они будут счастливы. 11. При выполнении арифметических операций учитывайте, что любая операция с участием null даст null, а деление на 0 - ошибку. Заранее предусмотрите эти сценарии. 12. Если где-то выбираете одно значение из множества с помощью сортировки, заранее предусмотрите, что она может быть/оказаться не однозначной, тогда при каждом запуске может выбираться новое значение. |
1. Осторожнее с проверками значений "не равно" (!=, not in, not between)
NULL не пройдёт ни одну из этих проверок, такие записи будут отфильтрованы.
Если их необходимо сохранить, используйте coalesce(t1.a,'X') != 'Y'
2. Всегда выполняйте регресс-тестирование на значительном объёме данных, а не на нескольких кейсах.
Используйте full join или except (в обе стороны)
#SQLtips
1. Осторожнее с проверками значений "не равно" (!=, not in, not between)
NULL не пройдёт ни одну из этих проверок, такие записи будут отфильтрованы.
Если их необходимо сохранить, используйте coalesce(t1.a,'X') != 'Y'
2. Всегда выполняйте регресс-тестирование на значительном объёме данных, а не на нескольких кейсах.
Используйте full join или except (в обе стороны)