SQL и БД Learning – Telegram
SQL и БД Learning
10.2K subscribers
797 photos
9 videos
22 files
445 links
№ 5060218708

Изучаем SQL с нуля

По всем вопросам @mascarov_valentin

Реклама на бирже - https://telega.in/c/SQl_and_DB_Learning
Download Telegram
Каким образом можно получить список клиентов, которые сделали хотя бы один заказ в каждом месяце в течение последних трех месяцев?

Для получения списка клиентов, которые сделали хотя бы один заказ в каждом месяце в течение последних трех месяцев, можно использовать подзапросы и агрегатные функции.

Надежный подход к решению этой задачи включает подзапрос, который связывается с основной таблицей по идентификатору клиента (customer_id). В подзапросе используется агрегатная функция COUNT() для подсчета количества уникальных месяцев, в которых клиент сделал заказ, и группировка по месяцу (MONTH()). Затем условие HAVING применяется к подзапросу для определения, что клиент сделал заказ во всех трех месяцах.
1👍12
#Вопросы_с_собеседования

При выборке из таблицы workers выведите дату в формате '31.12.2025'

Ответ на картинке.
👍10
Создание поля, объединяющего имя и зарплату в выборке из таблицы пользователей

Для создания поля, которое будет включать в себя и имена, и зарплату, можно использовать функцию CONCAT(). Она объединяет две или более строковые величины в одну строку.

Пример SQL-запроса для создания поля new_field на фото.

В примере мы выбираем таблицу users и создаем новое поле с помощью функции CONCAT(). Внутри функции указываем два поля, которые хотим объединить - name и salary. Также задаем новое имя для созданного поля - new_field, используя AS.

Теперь в результате выполнения запроса в выборке будет присутствовать новое поле new_field, которое будет содержать имя пользователя и его зарплату.
👍8
🖥 Список СУБД
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20😁6
Компактная таблица-шпаргалка по SQL.

Шпаргалка
👍15
This media is not supported in your browser
VIEW IN TELEGRAM
TRUNCATE мгновенно удаляет все строки в таблице

Одновременно удалите строки из дочерних таблиц с помощью функции

TRUNCATE TABLE ... CASCADE

Для этого внешние ключи должны быть ON DELETE CASCADE
👍11
Какой результат вернет следующий PostgreSQL/MySQL запрос:
SELECT GREATEST (6.62, - 8, '82') ;
Anonymous Quiz
24%
6.62
2%
- 8
26%
82
30%
Ошибка
19%
Посмотреть ответы
👍14
#Вопросы_с_собеседования

В чем разница между функциями NOW() и CURRENT_DATE() в PostgreSQL/MySQL?

NOW() возвращает время, когда начал исполняться оператор.

Основное различие между NOW() и CURRENT_DATE() заключается в том, что NOW() получает текущую дату и время в формате 'YYYY-MM-DD HH:MM:SS', а CURRENT_DATE() получает дату текущего дня 'YYYY-MM-DD'.
👍4❤‍🔥1
Делаем SQL-запросы чище

Периодически в коде запросов и "заточенных" под них индексов наблюдаю примерно подобные куски:

coalesce("Фамилия", '') || ' ' || coalesce("Имя", '') || ' ' || coalesce("Отчество", '')


Понятно, что тут хотели обезопасить себя от заполненности любого из полей NULL-значением, чтобы случайно вся строка не заNULL'илась.

Правда, тут возникают некоторые артефакты в виде "висящих пробелов" типа ' Иван Иванович' или 'Иванов Иван '.

Но ведь есть решение изящнее и проще - функция concat_ws:
concat_ws(' ', "Фамилия", "Имя", "Отчество")
👍10
🖥 Предположим, что нам необходимо получить данные о сотруднике, имеющем вторую по величине зарплату в компании. Мы можем использовать следующий запрос:

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 может находиться более одного сотрудника, если у них одинаковая зарплата.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18
Простой и эффективный метод удаления дубликатов из таблицы

Предположим, у нас есть простая таблица с двумя столбцами: id – это первичный ключ и v простое целочисленное значение

Приведенный код создает таблицу и вставляет несколько значений. Выведем на экран все строки из нашей тестовой таблицы. Как видите, id имеет уникальные значения, но поле val имеет содержит дубликаты (фото 1).

Наша задача состоит в том, чтобы удалить строки с поввторяющимися значениями в столбце val и сохранить уникальные значения с минимальным значением идентификатора id.

Для начала попробуем найти дубликаты. Мы можем использовать простое LEFT JOIN таблицы самой с собой по полю val с дополнительным условием для предотвращения объединения идентичных строк (для наглядности дадим алиасы для таблицы и копии) (фото 2).

В конечном итоге видно, что уникальные строки с минимальным id имеют (null) в столбцах из copy_tbl. Это происходит потому что для минимального значения id в исходной таблице нет строк соответсвующих условию в таблице копии. Итак, нам нужно оставить строки в которых нет соответствия (уникальные) и удалить. Это можно осуществить следующим запросом (фото 2).
👍10
NOT NULL в CREATE TABLE

Следующий SQL гарантирует, что столбцы "ID", "LastName", и "FirstName" не будут принимать нулевые значения при создании таблицы "Persons".
👍12
#Вопросы_с_собеседования

Какие ограничения на целостность данных существуют в SQL?

PRIMARY KEY - набор полей (1 или более), значения которых образуют уникальную комбинацию и используются для однозначной идентификации записи в таблице. Для таблицы может быть создано только одно такое ограничение. Данное ограничение используется для обеспечения целостности сущности, которая описана таблицей.

CHECK используется для ограничения множества значений, которые могут быть помещены в данный столбец. Это ограничение используется для обеспечения целостности предметной области, которую описывают таблицы в базе.

UNIQUE обеспечивает отсутствие дубликатов в столбце или наборе столбцов.

FOREIGN KEY защищает от действий, которые могут нарушить связи между таблицами. FOREIGN KEY в одной таблице указывает на PRIMARY KEY в другой. Поэтому данное ограничение нацелено на то, чтобы не было записей FOREIGN KEY, которым не отвечают записи PRIMARY KEY.
👍10
🖥 Предположим, что нам необходимо получить данные о сотруднике, имеющем вторую по величине зарплату в компании. Мы можем использовать следующий запрос:

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 может находиться более одного сотрудника, если у них одинаковая зарплата.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13
📢SQL Translator - это инструмент для преобразования запросов на естественном языке в SQL-запросы с помощью искусственного интеллекта. Этот проект является 100% бесплатным и с открытым исходным кодом.

git clone https://github.com/whoiskatrin/sql-translator.git

Github
Проект
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10😁2