SQL и БД Learning
Ir al canal en Telegram
№ 5060218708 Изучаем SQL с нуля По всем вопросам @mascarov_valentin Реклама на бирже - https://telega.in/c/SQl_and_DB_Learning
Mostrar más9 724
Suscriptores
-324 horas
-127 días
-4230 días
Archivo de publicaciones
9 721
+1
Простой и эффективный метод удаления дубликатов из таблицы
Предположим, у нас есть простая таблица с двумя столбцами: id – это первичный ключ и v простое целочисленное значение
Приведенный код создает таблицу и вставляет несколько значений. Выведем на экран все строки из нашей тестовой таблицы. Как видите, id имеет уникальные значения, но поле val имеет содержит дубликаты (фото 1).
Наша задача состоит в том, чтобы удалить строки с поввторяющимися значениями в столбце val и сохранить уникальные значения с минимальным значением идентификатора id.
Для начала попробуем найти дубликаты. Мы можем использовать простое LEFT JOIN таблицы самой с собой по полю val с дополнительным условием для предотвращения объединения идентичных строк (для наглядности дадим алиасы для таблицы и копии) (фото 2).
В конечном итоге видно, что уникальные строки с минимальным id имеют (null) в столбцах из copy_tbl. Это происходит потому что для минимального значения id в исходной таблице нет строк соответсвующих условию в таблице копии. Итак, нам нужно оставить строки в которых нет соответствия (уникальные) и удалить. Это можно осуществить следующим запросом (фото 2).
9 721
🖥 Предположим, что нам необходимо получить данные о сотруднике, имеющем вторую по величине зарплату в компании. Мы можем использовать следующий запрос:
WITH employee_ranking AS (
SELECT
employee_id,
last_name,
first_name,
salary,
RANK() OVER (ORDER BY salary DESC) as ranking
FROM employee
)
SELECT
employee_id,
last_name,
first_name,
salary
FROM employee_ranking
WHERE ranking = 2
Условие WHERE ranking = 2 используется для фильтрации строк второй по величине зарплаты. Обратите внимание, что на позиции 2 может находиться более одного сотрудника, если у них одинаковая зарплата.9 721
Делаем SQL-запросы чище
Периодически в коде запросов и "заточенных" под них индексов наблюдаю примерно подобные куски:
coalesce("Фамилия", '') || ' ' || coalesce("Имя", '') || ' ' || coalesce("Отчество", '')
Понятно, что тут хотели обезопасить себя от заполненности любого из полей NULL-значением, чтобы случайно вся строка не заNULL'илась.
Правда, тут возникают некоторые артефакты в виде "висящих пробелов" типа ' Иван Иванович' или 'Иванов Иван '.
Но ведь есть решение изящнее и проще - функция concat_ws:
concat_ws(' ', "Фамилия", "Имя", "Отчество")9 721
PostgreSQL 17: архитектура и тюнинг SQL-запросов
Погрузись в архитектуру и прокачай оптимизацию запросов одной из самых популярных open source СУБД – PostgreSQL.
🌐 В программе курса:
🤩 Разберем, как работают СУБД вообще и PostgreSQL в частности: что такое MVCC, ACID, WAL, LRU, PPC/TPC и другие фундаментальные понятия архитектуры баз данных
🤩 Получите свой собственный выделенный облачный PostgreSQL-сервер (8 vCPU, 12G RAM, 100G NVMe) – БЕСПЛАТНО на время обучения предоставляется
🤩 Получите теорию и практику EXPLAIN и EXPLAIN ANALYZE на разных типа запросов
🤩 Изучите архитектуру хранения данных в PostgreSQL, типы и особенности индексов, а также получите полезные советы и трюки оптимизации БД
🗓 Старт курса: 6 марта. Продолжительность: 5 недель обучения (четверг, 18:00 МСК).
Изучить программу и записаться можно здесь.
🤩Кто мы: R&D-центр Devhands, основатель школы Алексей Рыбак.
Автор курса — Николай Ихалайнен, эксперт по СУБД (ex-Percona), со-основатель MyDB, энтузиаст открытого ПО.
Реклама. ИП Рыбак А.А. ИНН 771407709607 Erid: 2VtzqvSHeZb
9 721
#Вопросы_с_собеседования
В чем разница между функциями NOW() и CURRENT_DATE() в PostgreSQL/MySQL?
NOW() возвращает время, когда начал исполняться оператор.
Основное различие между NOW() и CURRENT_DATE() заключается в том, что NOW() получает текущую дату и время в формате 'YYYY-MM-DD HH:MM:SS', а CURRENT_DATE() получает дату текущего дня 'YYYY-MM-DD'.9 721
У Nvidia снова проблемы с разъемами? Рассказываем, как не ошибиться в выборе железа!
Можно бесконечно читать новости про плавящиеся коннекторы, но лучше просто взять правильное железо и не волноваться.
Мы собрали гайд по выбору оборудования для LLM, где разобрали всё по полочкам:
🔹Какие бывают задачи?
🔹Какие требования к железу для конкретной задачи?
🔹На что обратить внимание при выборе сервера?
Выбрать железо, которое не подведёт в самый ответственный момент: @artificial_intelion_bot
9 721
У Nvidia снова проблемы с разъемами? Рассказываем, как не ошибиться в выборе железа!
Можно бесконечно читать новости про плавящиеся коннекторы, но лучше просто взять правильное железо и не волноваться.
Мы собрали гайд по выбору оборудования для LLM, где разобрали всё по полочкам:
🔹Какие бывают задачи?
🔹Какие требования к железу для конкретной задачи?
🔹На что обратить внимание при выборе сервера?
Выбрать железо, которое не подведёт в самый ответственный момент: @artificial_intelion_bot
9 721
Какой результат вернет следующий PostgreSQL/MySQL запрос:
SELECT GREATEST (6.62, - 8, '82') ;
9 721
TRUNCATE мгновенно удаляет все строки в таблице
Одновременно удалите строки из дочерних таблиц с помощью функции
TRUNCATE TABLE ... CASCADE
Для этого внешние ключи должны быть ON DELETE CASCADE9 721
Аномалии под нагрузкой в PostgreSQL: о чём стоит помнить и с чем надо бороться
Читать статью
9 721
💸 Вакансии для IT'шников
Выбери своё направление ⤵
1. Frontend
2. Python
3. Java
4. Тестировщик QA
5. Data Science
6. DevOps
7. C#
8. С/C++
9. Golang
10. PHP
11. Kotlin
12. Swift
13. Node.js
14. 1C
15. Flutter / Dart
16. Unity
17. Product Manager
18. Project Manager
19. System Analyst
20. Bussines Analyst
9 721
Создание поля, объединяющего имя и зарплату в выборке из таблицы пользователей
Для создания поля, которое будет включать в себя и имена, и зарплату, можно использовать функцию CONCAT(). Она объединяет две или более строковые величины в одну строку.
Пример SQL-запроса для создания поля new_field на фото.
В примере мы выбираем таблицу users и создаем новое поле с помощью функции CONCAT(). Внутри функции указываем два поля, которые хотим объединить - name и salary. Также задаем новое имя для созданного поля - new_field, используя AS.
Теперь в результате выполнения запроса в выборке будет присутствовать новое поле new_field, которое будет содержать имя пользователя и его зарплату.
9 721
#Вопросы_с_собеседования
❓При выборке из таблицы workers выведите дату в формате '31.12.2025'
Ответ на картинке.
9 721
Каким образом можно получить список клиентов, которые сделали хотя бы один заказ в каждом месяце в течение последних трех месяцев?
Для получения списка клиентов, которые сделали хотя бы один заказ в каждом месяце в течение последних трех месяцев, можно использовать подзапросы и агрегатные функции.
Надежный подход к решению этой задачи включает подзапрос, который связывается с основной таблицей по идентификатору клиента (customer_id). В подзапросе используется агрегатная функция COUNT() для подсчета количества уникальных месяцев, в которых клиент сделал заказ, и группировка по месяцу (MONTH()). Затем условие HAVING применяется к подзапросу для определения, что клиент сделал заказ во всех трех месяцах.
9 721
Задача
Выбрать все записи из таблицы tbl_name и отсортировать их по полю id в обратном порядке.
9 721
Если бы вы купили TRUMP coin на старте на 1000$, то уже сейчас у вас бы было 130.000$
Только вдумайтесь: Утром покупаете монет на 1000$, а уже через день 1000$ превратилась в 130.000$. Неплохо, правда?
Чтобы быть в тренде – достаточно читать Максима Гусева
Там рассказывают кейсы, как с 1000$ колотят состояние, а не просирают все.
Если хотите разбираться в мире крипты, вам сюда: https://t.me/+fxR-tkBeKItjZjM6
¡Ya disponible! Investigación de Telegram 2025 — los principales insights del año 
