Выбираем уникальные записи с приоритетом по дате!
Когда нужно взять по одной записи на пользователя,
Создадим таблицу:
Добавим данные:
Теперь выберем только последнюю запись на каждый email:
Результат:
🔥
➡️ SQL Ready | #практика
Когда нужно взять по одной записи на пользователя,
DISTINCT не всегда подходит: он не умеет выбирать, какая строка «главная». В PostgreSQL есть мощный приём — DISTINCT ON.Создадим таблицу:
CREATE TABLE users (
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
email TEXT NOT NULL,
login_count INT,
created_at TIMESTAMP DEFAULT now()
);
Добавим данные:
INSERT INTO users (email, login_count, created_at) VALUES
('alice@mail.com', 5, '2024-01-01'),
('alice@mail.com', 8, '2024-03-01'),
('bob@mail.com', 2, '2024-02-01');
Теперь выберем только последнюю запись на каждый email:
SELECT DISTINCT ON (email)
email, login_count, created_at
FROM users
ORDER BY email, created_at DESC, id DESC;
Результат:
email | login_count | created_at
----------------+--------------+----------
alice@mail.com | 8 | 2024-03-01
bob@mail.com | 2 | 2024-02-01
🔥
DISTINCT ON берёт по одной строке на группу, а ORDER BY задаёт, какая именно — последняя, первая или с нужным приоритетом. Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍8🤝6❤2
Даже при наличии индекса SQL часто ходит в таблицу, чтобы добрать недостающие поля.
INCLUDE решает это: добавляет нужные колонки в индекс и превращает Index Scan в Index Only Scan.Сегодня в посте:
• Как работает INCLUDE и почему это не дублирование;
• Как проверить, что запрос действительно читает только индекс;
• Где Covering Index даёт реальный прирост.
Производительность начинается не с кода, а с структуры индекса.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤7🔥6
В этой шпаргалке собраны основные оконные функции Oracle SQL, применяемые для аналитики, ранжирования и работы с порядком строк без свёртки данных. Они вычисляют значения в контексте "окна" — набора строк, связанных с текущей строкой. Это мощный инструмент для аналитических отчётов и сложных выборок.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13❤7🤝6
This media is not supported in your browser
VIEW IN TELEGRAM
Сайт с огромной коллекцией задач по программированию, от самых простых до тех, что реально заставят подумать.
Учиться можно на абсолютно любом языке. Отличный способ подтянуть логику, научиться писать аккуратный код и подготовиться к собесам.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍7🤝6❤2
USING — способ объединять таблицы в SQL!
Когда таблицы имеют одинаковые ключи,
Объединим заказы и клиентов по общему полю:
То же самое через
С
Можно соединять и по нескольким ключам:
Пример из аналитики: посчитаем сумму заказов по каждому клиенту:
🔥 Используйте
➡️ SQL Ready | #практика
Когда таблицы имеют одинаковые ключи,
USING помогает сократить код и избежать дублирования столбцов.Объединим заказы и клиентов по общему полю:
SELECT *
FROM orders
JOIN customers USING (customer_id);
То же самое через
ON выглядело бы чуть длиннее и менее лаконично:SELECT *
FROM orders
JOIN customers ON orders.customer_id = customers.customer_id;
С
USING SQL сам убирает дубликаты полей, оставляя одно customer_id в результирующем наборе.Можно соединять и по нескольким ключам:
SELECT *
FROM orders
JOIN shipments USING (order_id, customer_id);
Пример из аналитики: посчитаем сумму заказов по каждому клиенту:
SELECT customer_id,
c.customer_name,
SUM(o.amount) AS total_amount
FROM customers c
JOIN orders o USING (customer_id)
GROUP BY customer_id, c.customer_name
HAVING SUM(o.amount) > 1000
ORDER BY total_amount DESC;
🔥 Используйте
USING, когда имена ключей совпадают — это приём, который улучшает читаемость и уменьшает вероятность ошибок.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18❤9👍9
Транзакция — не просто “begin и commit”, а ещё и способ управлять атомарностью и блокировками!
Начинаешь с
Если что-то падает, делай
Не забывай: каждая открытая транзакция держит блокировки. Чем дольше она живёт, тем выше шанс конфликтов.
Контролируй уровень изоляции - баланс между скоростью и безопасностью:
🔥 Производительность БД начинается с правильного управления транзакциями и блокировками.
➡️ SQL Ready | #совет
Начинаешь с
BEGIN — всё, что дальше, идёт как единое целое:BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
Если что-то падает, делай
rollback, и база возвращается к исходному состоянию.Не забывай: каждая открытая транзакция держит блокировки. Чем дольше она живёт, тем выше шанс конфликтов.
Контролируй уровень изоляции - баланс между скоростью и безопасностью:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍8🤝6❤3
Сегодня создаём простого бота, который “понимает” текст запроса и отвечает на сообщения пользователя.
В этом посте:
• Храним шаблоны фраз и ответы в таблице responses;
• Используем ILIKE, чтобы находить ключевые слова в сообщении;
• Возвращаем лучший ответ по приоритету совпадений.
Приём показывает, что SQL способен работать не только с числами, но и с текстом, превращаясь в мини-экспертную систему.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27❤9👍7🤝1