👍8🔥4😁2
Materialized Views — решение для сложных аналитических запросов!
Материализованные представления — это отдельная структура, скажем с данными о продажах за последний месяц, использование которой позволяет разгрузить основную таблицу и значительно ускорить сложные аналитические запросы.
Синтаксис создания представления:
Далее мы по сути пишем обычный запрос с учетом данных, которые нам понадобятся в нашем представлении:
Теперь выберем записи о продажах за последний месяц:
Из минусов materialized views — необходимость их постоянного обновления, иначе данные могут быть неактуальными:
➡ SQL Ready | #практика
Материализованные представления — это отдельная структура, скажем с данными о продажах за последний месяц, использование которой позволяет разгрузить основную таблицу и значительно ускорить сложные аналитические запросы.
Синтаксис создания представления:
CREATE MATERIALIZED VIEW daily_sales_summary AS
Далее мы по сути пишем обычный запрос с учетом данных, которые нам понадобятся в нашем представлении:
SELECT
DATE_TRUNC('day', order_date) AS sale_day,
SUM(amount) AS total_sales
FROM orders
Теперь выберем записи о продажах за последний месяц:
WHERE created_at > NOW - INTERVAL '30 days'
DATE_TRUNC
используем для округления момента продажи до дня, чтобы затем группировать продажи по дням:GROUP BY DATE_TRUNC('day', order_date);
Из минусов materialized views — необходимость их постоянного обновления, иначе данные могут быть неактуальными:
REFRESH MATERIALIZED VIEW daily_sales_summary;
Materialized views
физически сохраняются на диске и занимают место. Используйте этот инструмент, если ваши аналитические запросы действительно сложные и выполняются медленно. Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥4❤2
This media is not supported in your browser
VIEW IN TELEGRAM
SQL Murder Mystery — это интерактивная игра, в которой нужно использовать SQL-запросы для расследования виртуального убийства.
📌 Ссылочка: mystery.knightlab
➡️ SQL Ready | #ресурс
Игрокам предоставляется доступ к базе данных с информацией о преступлении, и они должны применять свои навыки работы с SQL для поиска улик, анализа данных и выявления преступника.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍5
INSERT ON CONFLICT очень полезен в случаях, когда нужно вставить новую запись в таблицу, но если запись с таким же уникальным ключом уже существует — нужно обновить эту запись.
Следует использовать:
• Для сокращения запросов — когда вместо двух запросов (SELECT + INSERT/UPDATE) нужно выполнить только один.
• Для оптимизации — производительности и минимизации количества запросов к базе данных.
• Для конкурентный доступа — когда нужно избежать проблем с конкурентным доступом.
🔥 — если узнал новое
🤝 — если уже пользовался
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25🤝10👍5👎2❤1
REGEXP — инструмент, который удобно использовать, если требуется сложный и гибкий поиск по шаблону. Например, поиск по нескольким условиям или использование специальных символов и диапазонов.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25👍10❤6🤝1
ALL и ANY в SQL — учимся использовать для сравнения с подзапросами!
Эти операторы предназначены для сравнения результатов одного
Представим, что нам нужно найти все продукты, цена которых выше, чем цена любого продукта в категории
Теперь найдем всех клиентов, заказавших хотя бы один продукт с ценой выше 1000 рублей:
И найдем всех клиентов, которые заказывали продукты из определенной категории:
🔥 Но помните, что использование
➡️ SQL Ready | #практика
Эти операторы предназначены для сравнения результатов одного
SELECT
с результатами второго SELECT
из подзапроса, что может быть удобно в некоторых случаях: если подзапрос возвращает небольшое количество строк или когда нужно сравнить значение хотя бы с одним значением из подзапроса.Представим, что нам нужно найти все продукты, цена которых выше, чем цена любого продукта в категории
Discount
:SELECT product, price
FROM products
WHERE price > ALL (SELECT price FROM products WHERE category = 'Discount');
Теперь найдем всех клиентов, заказавших хотя бы один продукт с ценой выше 1000 рублей:
SELECT DISTINCT customer_id
FROM orders
WHERE product_id = ANY (SELECT product_id FROM products WHERE price > 1000);
И найдем всех клиентов, которые заказывали продукты из определенной категории:
SELECT DISTINCT customer_id
FROM orders
WHERE product_id = ANY (SELECT product_id FROM products WHERE category = 'Electronics');
🔥 Но помните, что использование
ALL
и ANY
возможно только с подзапросами и может быть неэффективным, если подзапрос возвращает большое количество строк.Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍10🔥4
👍14❤4🔥4👎2
Плейлист для тех, кто хочет не просто писать запросы, а понимать, как устроены базы данных. Реляционная модель, поведение SQL-операторов, индексы, нормализация, ACID, CRUD, NoSQL — всё по делу и с акцентом на логику работы с данными.
Ссылочка на плейлист: YouTube🖤
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥4
Нужно найти пиковые часы заказов по времени суток. Для этого воспользуемся функцией EXTRACT, чтобы вытащить час из даты заказа, и посчитаем количество заказов в каждом часе.
В этой задаче:
• EXTRACT(HOUR FROM ...) — вытаскиваем час из order_date.
• GROUP BY + COUNT — группируем по часу и считаем, сколько заказов было.
• ORDER BY — сортируем по убыванию, чтобы получить часы с наибольшей активностью.
🔥 — если попробуешь повторить
🤝 — если уже делал подобное
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26👍7🤝5❤3👎2