Получи случайную криптовалюту за регистрацию!

SQLite на практике

Логотип телеграм канала @sqliter — SQLite на практике S
Логотип телеграм канала @sqliter — SQLite на практике
Адрес канала: @sqliter
Категории: Технологии
Язык: Русский
Количество подписчиков: 2.13K
Описание канала:

Все о работе с данными в sqlite // antonz.ru

Рейтинги и Отзывы

1.50

2 отзыва

Оценить канал sqliter и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

0

4 звезд

0

3 звезд

0

2 звезд

1

1 звезд

1


Последние сообщения 4

2021-10-11 13:16:24 Табличные выражения

Прием №1, чтобы писать хорошие читаемые SQL-запросы — это табличные выражения (CTE). Люди их боятся, а зря.

Любой подзапрос:

select a, b, c
from (X)
where e = f

Механически превращается в CTE:

with cte_name as (X)
select a, b, c
from cte_name
where e = f

Вот и вся наука, не надо читать увесистую книгу по SQL или проходить курсы.

Существует миф, что «CTE медленные», но на современных СУБД это не так. Да и вообще — как с любым утверждением о медленности чего-либо, всегда можно сравнить два варианта (подзапрос и CTE), если сомневаешься.

Кроме обычных CTE бывают еще рекурсивные — вот это реально злые ребята. А обычные прекрасны, используйте их.
417 viewsedited  10:16
Открыть/Комментировать
2021-09-28 14:17:21 Написал на хабр, как устроена sqlite-песочница в браузере. Если вы немного знакомы с js, может быть интересно → https://habr.com/ru/post/580240/
728 views11:17
Открыть/Комментировать
2021-09-23 17:16:03 SQLite-песочница в браузере

Чего мне всегда не хватало, так это аналога JSFiddle / CodePen для SQL. Онлайн-песочницы, в которой можно быстро проверить запрос и поделиться с другими.

Да, есть SQL Fiddle и DB Fiddle, но оба весьма неудобные, на мой взгляд.

Вот чего хотелось:

— Возможность загрузить готовую базу, а не писать SQL для создания таблиц.
— Подключать как локальные базы, так и удаленные (по url).
— Сохранять базу и запросы в облаке.
— Бесплатно и без регистрации.
— Свежайшая версия SQLite.
— Минимализм.

В общем, сделал сам:
sqlime.org
1.3K viewsedited  14:16
Открыть/Комментировать
2021-06-06 17:53:38 Задачка о группах — решение

Увидев задачку о группах, коллега написал мне:

> Человек, порочащий олимпиадное программирование, просит решить задачку ЗА ОДИН запрос. Зачем?

Справедливо. Действительно, главное в решении — не формальное количество запросов, а время на понимание. Поэтому давайте решим без олимпиадного ажиотажа, спокойно и по шагам:

https://antonz.ru/sql-groups/
440 views14:53
Открыть/Комментировать
2021-06-01 21:26:17 Первому, кто решит задачу за минимальное количество запросов и сможет объяснить решение — любой мой курс в подарок ツ Пишите → @nalgeon
325 viewsedited  18:26
Открыть/Комментировать
2021-06-01 21:07:46 Задачка о группах

Подписчик прислал интересную задачку, которая время от времени встречается в реальной жизни. В общем виде звучит так: найти похожие объекты и объединить их в группы.

Рассмотрим на конкретном примере. Есть таблица с атрибутами пользователей:

user_id, attr
1, alpha
1, beta
2, beta
2, gamma
3, delta
3, epsilon
4, delta
4, zeta
5, zeta
5, alpha
6, iota
7, iota
7, kappa
8, kappa
8, lambda

Хотим объединить пользователей в группы. При этом действуют правила:

— Если пользователи A и B обладают общим свойством → они входят в одну группу.
— Если A и B обладают общим свойством P1, B и C обладают общим свойством P2 → A, B, C входят в одну группу.
— Идентификатором группы считается минимальный идентификатор из входящих в нее пользователей.

Для каждой группы хотим еще определить список атрибутов ее пользователей.

В итоге должно получиться две группы:

group_id, user_id, attrs
1, 1, "alpha,beta,gamma,delta,epsilon,zeta"
1, 2, "alpha,beta,gamma,delta,epsilon,zeta"
1, 3, "alpha,beta,gamma,delta,epsilon,zeta"
1, 4, "alpha,beta,gamma,delta,epsilon,zeta"
1, 5, "alpha,beta,gamma,delta,epsilon,zeta"
6, 6, "iota,kappa,lambda"
6, 7, "iota,kappa,lambda"
6, 8, "iota,kappa,lambda”

За сколько запросов возьметесь решить задачу? Каждый CTE или подзапрос считается за отдельный запрос. Использовать процедурные расширения SQL вроде pl/sql и pl/pgSQL — нельзя.

Опрос следует.
356 viewsedited  18:07
Открыть/Комментировать
2021-05-31 09:51:39 Курс по оконным функциям

Закончил курс по «окошкам»! 15 уроков, 39 задачек, бессчётное количество картинок и гифок.

Подходит для всех, кто знает обычные селекты и работает с MySQL, PostgreSQL или SQLite.

Стоит 500₽, для выпускников «SQLite для аналитики» — скидка 50%.

https://stepik.org/z/95367
704 viewsedited  06:51
Открыть/Комментировать
2021-05-14 15:10:28 Оконные функции: скользящие агрегаты

Заканчиваем разбираться с оконными функциями. В этой части посмотрим, как считать показатели в динамике — скользящее среднее и сумму нарастающим итогом.

Это последняя статья серии! Гарантирую, что более понятного введения в «окошки» не найдете во всем интернете

https://antonz.ru/window-rolling/
403 views12:10
Открыть/Комментировать
2021-05-13 11:25:45 Добавить или обновить записи одним запросом

Участник курса спрашивает:

Есть таблица, хочу ежедневно загружать в неё обновления из csv. Если по id запись уникальная — добавлять, а если запись существует — обновлять поля, которые отличаются, кроме id. Это можно как-то из коробки?

Да! Такой подход (добавить или обновить по необходимости) в мире SQL называется «upsert». В SQLite он реализуется через инструкцию on conflict.

Допустим, мы хотим добавить/обновить записи в таблице stats. Тогда запрос будет примерно такой:

insert into stats(id, last_updated, usage)
select ... from ...
on conflict(id) do update
set
last_updated = excluded.last_updated,
usage = usage + excluded.usage;

excluded — это та запись, которую мы пытаемся вставить (и она вызвала конфликт по id).

Что особенно приятно, такой же синтаксис сработает и в PostgreSQL (SQLite позаимствовал фичу у него).

P.S. Присоединяйтесь к чату «SQL на практике»! https://t.me/sqliter_chat
303 views08:25
Открыть/Комментировать