SQL задачи
10K subscribers
213 photos
170 links
SQL задачи для подготовки к собеседованию.

SQL тесты для проверки знаний.

№ 5635948084

SQL запросы к конкретной Базе данных с решением и разбором

По вопросам рекламы: @anothertechrock
Download Telegram
Задачка по нашей базе данных, которая находится в шапке канала.
Код генерации базы данных и INSERT данных по ссылке ТУТ.

ВОПРОС:
Какой тип JOIN следует использовать между таблицами customer и order_table, чтобы отобразить всех клиентов, включая тех, кто не делал
заказов?

Ответ под спойлером, но если хотите сперва проверить свою догадку, следующим постом опубликуем тест с вариантами ответов.

Правильный ответ ⤵️

LEFT JOIN

Если вам понравился вопрос - зашарьте его друзьям 👉 SQLQuestions
Please open Telegram to view this post
VIEW IN TELEGRAM
Какой верный ответ на задачку выше? 👆
Anonymous Quiz
18%
INNER JOIN
61%
LEFT JOIN
10%
RIGHT JOIN
11%
CROSS JOIN
🚗 Как найти кратчайший маршрут с помощью Apache Spark и GraphFrames

Разбираем кейс на реальных данных из OpenStreetMap — ищем оптимальный маршрут

🔍 Что делаем
1. Загружаем граф дорог города с помощью OSMnx
2. Сохраняем вершины и ребра с координатами, скоростями и геометрией
3. Загружаем всё в Spark
4. Находим кратчайший путь с помощью GraphFrames

📍 1. Скачиваем карту и строим граф улиц

import osmnx as ox

# Загрузка данных о дорогах Москвы
G = ox.graph.graph_from_place("Moscow", network_type="drive")

# Отображение дорог на карте
moscow_gdf = ox.geocoder.geocode_to_gdf("Moscow")
fig, ax = ox.plot.plot_graph(G, show=False, close=False, bgcolor="#111111", edge_color="#ffcb00", edge_linewidth=0.3, node_size=0)
moscow_gdf.plot(ax=ax, fc="#444444", ec=None, lw=1, alpha=1, zorder=-1)

# Настройка границ карты
margin = 0.02
west, south, east, north = moscow_gdf.union_all().bounds
margin_ns = (north - south) * margin
margin_ew = (east - west) * margin
ax.set_ylim((south - margin_ns, north + margin_ns))
ax.set_xlim((west - margin_ew, east + margin_ew))
plt.show()


📁 2. Сохраняем геометрическое описание города в формате GeoJSON и данные о вершинах и рёбрах в формате CSV
with open('Moscow.geojson', 'w') as file:
file.write(moscow_gdf.to_json())

nodes = G.nodes(data=True)
with open('nodes.csv', 'a') as file:
file.write("id,lat,lonn")
for (node, data) in nodes:
file.write("%d,%f,%fn" % (node, data.get("y"), data.get("x")))

edges = G.edges(data=True)
def decode_maxspeed(maxspeed):
match maxspeed:
case str():
match maxspeed.lower():
case "ru:urban": return 60
case "ru:rural": return 90
case "ru:living_street": return 20
case "ru:motorway": return 110
case _: return int(maxspeed)
case list(): return min(list(map(decode_maxspeed, maxspeed)))
case _: return maxspeed

with open('edges.csv', 'a') as file:
file.write("src,dst,maxspeed,length,geometryn")
for (src, dst, data) in edges:
maxspeed = decode_maxspeed(data.get("maxspeed", 999))
length = float(data.get("length"))
geometry = shapely.wkt.dumps(data.get("geometry"))
file.write("%d,%d,%d,%f,%sn" % (src, dst, maxspeed, length, geometry))


3. Используем библиотеку GraphFrames для обработки графов на Apache Spark

from pyspark.sql import SparkSession

spark = SparkSession.builder
.config("spark.jars.packages", "graphframes:graphframes:0.8.4-spark3.5-s_2.12")
.master("local[*]")
.appName("GraphFrames")
.getOrCreate()

nodes = spark.read.options(header=True).csv("nodes.csv")
edges = spark.read.options(header=True).csv("edges.csv")

# Вычисление времени прохождения рёбер
edgesT = edges.withColumn("time", edges["length"] / edges["maxspeed"])

# Построение графа
from graphframes import *

g = GraphFrame(nodes, edgesT)


🧭 4. Ищем кратчайший путь по времени
например, от Измайлово до ЖК Зиларт
src = "257601812"
dst = "5840593081"

paths = g.shortestPaths(landmarks=[dst])
paths.filter(F.col("id") == src).show(truncate=False)


💡 Результат: 40 шагов от точки A до точки B.

Такой подход легко масштабируется на миллионы маршрутов. Используйте Spark и GraphFrames для построения логистических моделей, маршрутизации и городского планирования.

🚀 Хотите прокачаться в работе с Big Data? Изучайте Spark! Записывайтесь на курс Spark Developer от OTUS — учитесь на реальных данных и продвинутых кейсах: https://vk.cc/cMT1Hp

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Что вернёт запрос?

SELECT
CONCAT(LEFT(first_name, 1), '.', LEFT(last_name, 1), '.') AS abbreviation
FROM customer;


Схема БД и код для генерации данных находятся в шапке канала.

Запрос не выдает число или конкретную категорию. Просто опишите результат своими словами в комментариях. А для тех, кто предпочитает тесты, опубликуем тест с вариантами ответа в следующем посте.

Если вам понравился вопрос - зашарьте его друзьям 👉 SQLQuestions
🚨 Не пропустите 19 июня в 20:00 бесплатный вебинар “SQL: Расширяем понимание индексов в PostgreSQL и MS SQL Server” от курса “SQL для аналитиков и разработчиков”.

На вебинаре обсудим:
Какие ещё типы индексов существуют помимо классического B-Tree.
Как разные СУБД реализуют поддержку дополнительных индексов.
Где могут быть полезны GIN, GiST, BRIN, Columnstore и другие варианты.
Как подходить к выбору типа индекса под конкретную задачу.

В результате вебинара вы сможете:
— Лучше ориентироваться в возможностях индексирования в PostgreSQL и MS SQL Server.
— Понимать, какой тип индекса подходит для разных типов данных и запросов.
— Использовать дополнительные индексы там, где это действительно имеет смысл.
— Повысить эффективность работы с БД за счёт грамотного выбора индексации.

Оставляйте заявку на бесплатный урок и получите запись прошлого вебинара: https://vk.cc/cMV3O6

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Какая команда используется для создания новой виртуальной таблицы, которая базируется на результатах SQL-запроса?
Anonymous Quiz
33%
CREATE VIRTUAL TABLE
60%
CREATE VIEW
8%
ALTER VIEW
🔥 Научитесь работать с базами данных и анализировать данные на новом уровне! Курс «SQL для разработчиков и аналитиков» подходит как для новичков, так и для опытных специалистов.

Вы изучите основы реляционных БД, научитесь создавать сложные SQL-запросы, работать с различными СУБД (PostgreSQL, MySQL, SQL Server) и оптимизировать запросы для повышения производительности.

Вы освоите как базовый, так и продвинутый синтаксис SQL. Применяйте эти навыки для решения реальных задач.

Набор скоро закроется, не упустите шанс прокачать свои навыки и открыть новые перспективы для карьерного роста.

Пройдите тест и получите скидку на обучение:
https://vk.cc/cNbsJ2


Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Какая функция позволяет преобразовать все буквы в выбранном столбце в верхний регистр?
Anonymous Quiz
5%
TOP
89%
UPPER
6%
UP
Задачка по нашей базе данных, которая находится в шапке канала.
Код генерации базы данных и INSERT данных по ссылке ТУТ.

ВОПРОС:
Какая фильтрация по order_date в таблице order_table вернёт заказы за январь 2024 года?

Ответ под спойлером, но если хотите сперва проверить свою догадку, следующим постом опубликуем тест с вариантами ответов.

Правильный ответ👇

WHERE order_date >= '2024-01-01' AND order_date < '2024-02-01'

Если вам понравился вопрос - зашарьте его друзьям 👉 SQLQuestions
Please open Telegram to view this post
VIEW IN TELEGRAM
🚨 Не пропустите 02 июля в 20:00 бесплатный вебинар “SQL: Оконные функции — когда GROUP BY уже не хватает” от курса “SQL для аналитиков и разработчиков”.

На вебинаре обсудим:
Что такое оконные функции и чем они отличаются от агрегатных.
Как с их помощью выполнять расчёты без группировки.
Практические примеры: ранжирование, сравнение с предыдущей строкой, накопительные суммы и т.д.
Что такое PARTITION BY и ORDER BY в контексте окон.
Как оконные функции помогают упростить сложные подзапросы и JOIN-ы.

После вебинара вы сможете:
— Уверенно использовать оконные функции в повседневной работе.
— Упрощать логику отчётов и аналитических расчётов.
— Заменять сложные конструкции простыми и эффективными оконными выражениями.
— Разрабатывать запросы, в которых используются ROW_NUMBER(), LAG(), LEAD(), SUM() OVER() и др.

Оставляйте заявку на бесплатный урок и получите запись прошлого вебинара: https://vk.cc/cNdrqD

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
🎓 1 июля в 20:00 МСК OTUS проведёт открытый вебинар «Архитектура DWH по рецепту: метод борща в действии». Это необычный формат, где этапы приготовления блюда помогают понять логику построения хранилища данных.

🎯 На уроке разберём, как «подготовка ингредиентов» (сбор и очистка данных) отражается в core-слое DWH, а «подача блюда» (аналитический слой) превращается в понятные бизнес-отчёты. Вы увидите реальные примеры проектирования масштабируемой аналитической платформы и поймёте, какие компетенции нужны команде.

Участники смогут сразу применять принципы: иерархия слоёв, оптимизация storage-запросов и построение BI-дашбордов, которые будут понятны конечному пользователю. Вы узнаете, как избежать «переваривания» данных и сделать архитектуру отказоустойчивой.

➡️ Этот урок проходит в преддверии старта курса «Data Warehouse Analyst». Все участники получат скидку на обучение.

Регистрируйтесь прямо сейчас, чтобы не пропустить:
https://vk.cc/cNihQr

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
⚡️Пошаговый план: как стать аналитиком данных в 2025

Хотите попасть в аналитику, но теряетесь в море информации и не понимаете, какие навыки действительно важны? Боитесь, что без опыта вас не возьмут на работу? И да, ещё один популярный вопрос — а что, если мне 30/40/50+ лет?

Андрон Алексанян — эксперт по аналитике с 8-летним опытом и по совместительству CEO Simulative — покажет рабочие схемы и чёткий план, как устроиться в аналитику быстрее, даже если у вас нет опыта

Что будет на вебинаре?

🟠 Разберёте полный роадмап: что учить, в каком порядке, до какого уровня;
🟠 Лайфхаки трудоустройства:
— покажут реальные примеры, как оформить резюме и портфолио, чтобы привлекать внимание;
— обсудите, какие отклики работают, а какие сразу отправляют в корзину;
— изнанка найма: инсайдерский взгляд на процессы отбора
🟠 Практические техники для новичков: разберёте, как компенсировать недостаток опыта и быстро закрывать пробелы в знаниях

🕗 Важно досмотреть вебинар до конца, чтобы получить бонус от Simulative, который поможет бустануть карьеру

😶Зарегистрироваться на бесплатный вебинар
Please open Telegram to view this post
VIEW IN TELEGRAM
Задачка по нашей базе данных, которую можно найти в шапке канала.
Код генерации базы данных и INSERT данных по ссылке ТУТ.

ВОПРОС:
Какой столбец нужно указать в PARTITION BY, чтобы получить первый заказ каждого пользователя?

WITH ranked_orders AS (
SELECT
*
, ROW_NUMBER() OVER (PARTITION BY _____ ORDER BY order_date DESC)
AS rn
FROM order_table
)
SELECT * FROM ranked_orders WHERE rn = 1;


Ответ под спойлером, но если хотите сперва проверить свою догадку, следующим постом опубликуем тест с вариантами ответов.

Правильный ответ ⤵️

customer_id

Если вам понравился вопрос - зашарьте его друзьям 👉 SQLQuestions
Please open Telegram to view this post
VIEW IN TELEGRAM
Какой верный ответ на задачку выше? ⬆️
Anonymous Quiz
5%
quantity
26%
order_id
13%
order_date
56%
customer_id
📕 Архитектура и дизайн систем на основе NoSQL в облаках для разработчиков, администраторов, специалистов по базам данных, Data engineers, Backend и FullStack-разработчиков

На открытом уроке 10 июля в 20:00 мск мы погрузимся в тонкости работы с системами на основе NoSQL в облачных средах:

📗 На вебинаре разберём:
1. Основы NoSQL и его применение в облачных средах;
2. Реальные примеры и кейсы использования NoSQL в облаках;

📘 В результате на практике разберетесь в настройке и развертывании NoSQL баз данных в популярных облачных платформах (Сберклауд, Яндекс Облако, AWS, Google Cloud, Azure) и освоите применение основных операции с данными, масштабирования и управления производительностью NoSQL.

👉 Регистрация и подробности о курсе NoSQL: https://vk.cc/cNpk2M

Все участники открытого урока получат скидку на курс "NoSQL"

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576