Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
#Круги добра
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Битва Героев: RPG - увлекательная игра в жанре РПГ.

Битва Героев: RPG

Приключения, Фэнтези

Играть

Топ прошлой недели

  • SpongeGod SpongeGod 1 пост
  • Uncleyogurt007 Uncleyogurt007 9 постов
  • ZaTaS ZaTaS 3 поста
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
VelStyling
VelStyling
6 часов назад
Серия SQL: знакомство

LIMIT и интересные кейсы с ним. Или почему LIMIT - друг аналитика⁠⁠

Обычно все знают самое базовое применение LIMIT - ограничение строк выдачи в запросе.

LIMIT 10 -> показать 10 строк

Но применение LIMIT не ограничивается только ограничением :-).
Есть интересные кейсы по использованию LIMIT в своих запросах.
Об этом чуть ниже.

А пока подписывайся на мой канал На связи: SQL Там я публикую посты про особенности и нюансы SQL. Этот канал про то, как не бояться баз данных, понимать, что такое JOIN, GROUP BY и почему NULL ≠ 0. Его я веду с нуля подписчиков. Присоединяйся!

LIMIT и интересные кейсы с ним. Или почему LIMIT - друг аналитика Эмоциональное выгорание, Аналитика, Аналитик, Анализ данных, SQL, Ms SQL, База данных, Системный анализ, Системный аналитик, Длиннопост

И так, какие же кейсы есть с применением LIMIT

  1. LIMIT + OFFSET

    Многие помнят про LIMIT, но забывают про то, что можно еще применять сдвиг.

    SELECT *
    FROM users
    ORDER BY id
    LIMIT 10 OFFSET 20;

    Этот запрос вернёт 10 строк, начиная с 21-й.

    Такой прием применяется, например, в постраничной выдаче результатов запроса.

    Но этот кейс имеет и минусы: OFFSET все равно просматривает первые 20 строк, чтобы добраться до нужных. При больших объемах OFFSET работает медленно.

  2. LIMIT в UPDATE и DELETE

    Да, да - в этих операторах тоже можно использовать LIMIT, не только в SELECT

    DELETE FROM logs ORDER BY created_at ASC LIMIT 1000;

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

  3. LIMIT в подзапросах

    Об этом часто помнят, т.к. подзапрос является запросом, а в запросах использование LIMIT - вполне привычное дело.


    Найдем самый дорогой заказ:

    SELECT *

    FROM orders

    WHERE id = (SELECT id FROM orders ORDER BY price DESC LIMIT 1);

    Это иногда проще, чем возиться с MAX() и джойнами.

  4. LIMIT vs FETCH … WITH TIES

    В некоторых СУБД (например, SQL Server, Oracle) есть фича:

    SELECT *

    FROM products

    ORDER BY price DESC

    FETCH FIRST 3 ROWS WITH TIES;

    Такой запрос вернёт не просто 3 строки, а все строки, у которых цена такая же, как у третьей записи.
    (например, если на третьем месте несколько товаров с одинаковой ценой).


    LIMIT показывает первые N строк после сортировки
    А вот WITH TIES говорит: «Выдай все строки, которые наравне с последней по значению сортировки».


    В других СУБД такой синтаксис можно реализовать через LIMIT + подзапрос с оконной функцией RANK()

  5. LIMIT 0

    Очень полезный трюк.

    SELECT * FROM users LIMIT 0;

    Вернёт пустую таблицу, но со всеми названиями и типами столбцов.
    Это часто используют для генерации схемы в BI-инструментах или в тестах

  6. LIMIT в CTE (PostgreSQL)

    Можно ограничивать данные прямо на уровне общего табличного выражения (CTE), чтобы уменьшить нагрузку:

    WITH top_orders AS (

    SELECT * FROM orders ORDER BY price DESC LIMIT 100

    )

    SELECT * FROM top_orders WHERE customer_id = 42;

Так мы сначала берём только 100 дорогих заказов, а потом фильтруем по клиенту.

В итоге LIMIT — это не просто «дай 10 строк», а инструмент для оптимизации, постраничной навигации, аккуратных обновлений и даже для защиты от перегруза.

Подписывайся на мой ТГ канал На связи: SQL, чтобы узнавать/вспоминать еще больше нюансов SQL запросов.

Показать полностью 1
[моё] Эмоциональное выгорание Аналитика Аналитик Анализ данных SQL Ms SQL База данных Системный анализ Системный аналитик Длиннопост
0
0
VelStyling
VelStyling
1 день назад
Серия SQL: знакомство

ORDER BY - это как уборка в шкафу. Вещи можно разложить по цвету, по размеру или просто свалить все в кучу⁠⁠

ORDER BY — штука вроде бы простая («отсортируй строки»), но там есть много нюансов, про которые мы просто не помним или не пользуемся.

Вообще мы даже своими смартфонами не всегда (да, что уж - никогда) не пользуемся на полную мощность.

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

ORDER BY - это как уборка в шкафу. Вещи можно разложить по цвету, по размеру или просто свалить все в кучу Аналитика, Математика, Урок, Эмоциональное выгорание, SQL, Ms SQL, Аналитик, Анализ данных, База данных, Программирование, Длиннопост
  1. Блок с ORDER BY предназначен для сортировки результата выборки.
    По умолчанию сортировка ASC (по возрастанию). Можно явно писать:

ORDER BY age ASC -- от младших к старшим
ORDER BY age DESC -- от старших к младшим

2. Можно сортировать сразу по нескольким столбцам:

ORDER BY country, city

Сначала сортируются страны, внутри них — города.

3. Можно писать не имя, а номер колонки в SELECT:

SELECT name, age
FROM users
ORDER BY 2 DESC; -- сортируем по age

Но это считается «плохим тоном» — лучше явно указывать названия. Хотя мне очень нравится это использовать, особенно, когда в селекте не просто имя столбца, а вычисление.

4. NULL в ORDER BY требует особого внимание.
NULL в разных БД обрабатывается по-разному.

В PostgreSQL:

  • ASC → NULL идут в конце

  • DESC → NULL идут в начале

можно явно писать:

ORDER BY age ASC NULLS FIRST;
ORDER BY age DESC NULLS LAST;

В MySQL и SQL Server правила отличаются:

  • в MySQL NULL всегда считаются «меньше всего» (т.е. идут первыми в ASC).

  • в SQL Server можно управлять через ISNULL()/COALESCE().

В MySQL и SQL Server нельзя использовать NULLS FIRST или NULLS LAST при сортировке,

Для SQL Server используем:

ORDER BY ISNULL(age, 9999) ASC;
ORDER BY COALESCE(age, 9999) ASC;

Здесь NULL мы заменяем на большое число (9999), и оно уходит в конец сортировки по возрастанию.
А если хотим NULL в начало — ставим что-то маленькое, например -1.

Для MySQL есть поведение по умолчанию:

  • При ASC → NULL идут первые

  • При DESC → NULL идут последние

А если нужно наоборот, то делаем хитрость с IS NULL:

ORDER BY age IS NULL, age ASC;

Здесь age IS NULL вернёт 1 для NULL и 0 для обычных значений.
SQL сначала отсортирует по этому условию (0 → 1), а потом уже по age.

5. Можно сортировать не только по полям, но и по функциям.

ORDER BY LENGTH(name) DESC;
ORDER BY purchase_amount * discount;

6. Случайная сортировка - имеет место быть. Но очень "дорога" в использовании на больших объемах.

-- PostgreSQL / SQLite
ORDER BY RANDOM()

-- MySQL
ORDER BY RAND()

Часто случайная сортировка используется при тестировании на небольших объемах.
- хотим показать пользователю случайный товар в магазине
- хотим проверить, как работает приложение, не завися от конкретного порядка записей
- рекомендательные системы: в выдачу добавляем случайный товар, чтобы не зацикливать пользователя только на "популярных" товарах.
- игры или викторины: рандомная выдача вопросов.

7. Есть еще такое понятие как COLLATION (сравнение строк).

ORDER BY учитывает локаль (collation). Поэтому, например, русские буквы могут сортироваться по-разному в разных СУБД:

  • А может идти перед а, или наоборот.

  • Можно явно указать сортировку:

ORDER BY name COLLATE "C" -- по байтовому значению
ORDER BY name COLLATE "ru_RU" -- по русскому алфавиту

Представь, что у тебя есть список имён:
['Елена', 'елена', 'Жанна', 'Анна']

Когда ты пишешь в SQL:

SELECT * FROM users ORDER BY name;

база должна решить:

  • считать ли «Елена» и «елена» одинаковыми?

  • что идёт раньше: «Ж» или «А»?

  • как сравнивать буквы с диакритикой: «é» vs «e»?

Вот именно на эти вопросы отвечает collation.

То есть COLLATION — это как правило сортировки в библиотеке: от него зависит, где именно окажется твоя книга.

То есть, ORDER BY — это не просто «отсортировать», а ещё и про то:

  • куда денутся NULL

  • как сортируются строки (с учётом локали)

  • можно ли сортировать по выражениям или случайно

В моем ТГ канале На связи: SQL я знакомлю новичков с языком SQL и хочу, чтобы те, кто желает познакомиться с анализом данных с легкостью шли в это направление. Присоединяйся!

Показать полностью
[моё] Аналитика Математика Урок Эмоциональное выгорание SQL Ms SQL Аналитик Анализ данных База данных Программирование Длиннопост
0
120
graf4ikov
graf4ikov
4 дня назад
Новости онлайн

Российский блогер BadComedian оказался в базе экстремистского сайта "Миротворец"⁠⁠

МОСКВА, 6 сентября. /ТАСС/. Российский блогер Евгений Баженов (BadComedian) внесён в списки украинского экстремистского сайта "Миротворец".

Как указано на сайте, кинообозреватель был внесён в списки в сентябре 2022 года за "распространение российских нарративов" и "манипулирование общественно значимой информацией".

"Миротворец" был создан в 2014 году. Сайт содержит собранную нелегальным путем базу личных данных людей, включая журналистов, артистов и политиков, которые посещали Крым, Донбасс или по какой-либо иной причине вызвали негативную оценку авторов ресурса. В РФ по решению суда доступ к нему заблокирован.

Источник: ТАСС

ТАСС Россия Украина Россия и Украина Сайт Миротворец BadComedian 2022 Сентябрь База данных Политика Блогеры Крым Донбасс 2014 Текст
60
3
Cond3nz
Cond3nz
12 дней назад

Подскажите решение БД для 1С⁠⁠

Всем привет, имеется инфраструктура с множеством вм MSsql для 1С. Хотим перенести это все на 1 сервер или кластер серверов для удобства администрирования и обновления. Сначала думали использовать кластер Postgres + patroni + etcd но как я понял (а я человек очень далёкий от 1с, в компании занимаюсь только инфраструктурой и linux) 1С не умеет разделять куда отправлять запросы на чтение, а куда на запись, соответственно балансировать запросы в кластере master/slave не получиться.

У нас имеется кластер proxmox ceph с RBD для нужд виртуализации, впринципе HA можно обеспечить только нахождением вм на ceph, ответ на вопрос хватит ли нам одного инстанса postgres без балансировки мне пока не известен.

Подскажите у кого был опыт сколько пользователей 1С способен обслуживать 1 инстанс postgres ? Какие решения кластеризации master master вы прикручивали к 1С? Или лучше как вы организовывали шардирование базы для 1с? Есть ли польза от pgbouncer для 1С при использовании postgres?

1С Системное администрирование Postgresql База данных Ms SQL Текст
8
0
VelStyling
VelStyling
14 дней назад
Серия SQL: знакомство

AND и OR в SQL: как правильно соединять условия⁠⁠

Когда мы работаем с базой данных, почти всегда хотим не просто что-то выбрать, а применить несколько условий сразу. Например: выбрать всех клиентов старше 18 лет и с активной подпиской.

И здесь на помощь приходят два основных логических оператора: AND и OR.

AND и OR в SQL: как правильно соединять условия Аналитика, Эмоциональное выгорание, Аналитик, Системный аналитик, SQL, Microsoft Excel, Таблица, Данные, База данных, IT

Что делают AND и OR

  • AND — «и». Все условия должны быть выполнены одновременно.
    Пример: выбрать из холодильника молоко и яйца, чтобы приготовить омлет:

SELECT *

FROM fridge

WHERE product = 'milk' AND product = 'eggs';

(Да, в реальности одной строки с молоком и яйцом не будет, но идея ясна: оба условия должны выполняться вместе.)

OR — «или». Достаточно, чтобы выполнено было хотя бы одно условие.
Пример: выбрать продукты, которые нужно купить или молоко, или яйца:

SELECT *

FROM shopping_list

WHERE product = 'milk' OR product = 'eggs';

Где могут использоваться

Эти операторы обычно используют в блоке WHERE, чтобы фильтровать данные.
Также можно применять их в:

  • HAVING — фильтрация агрегатов после GROUP BY

  • JOIN ON — комбинирование условий соединения таблиц

Пример с HAVING:

SELECT category, COUNT(*)

FROM fridge

GROUP BY category

HAVING COUNT(*) > 5 AND AVG(expiry_date) < '2025-08-01';

Особенности и нюансы:

  • Порядок выполнения важен

    AND имеет более высокий приоритет, чем OR.

    Если смешиваете их, всегда используйте скобки для точного порядка:

    SELECT *

    FROM fridge

    WHERE (product = 'milk' OR product = 'eggs') AND expiry_date < '2025-08-01';

  • AND «сжимает» результат, OR «расширяет» результат

    AND оставляет меньше строк, OR — больше

Частые ошибки

  • Забыли скобки и получили слишком большой или слишком маленький результат

  • Использовали AND там, где нужен OR (или наоборот)

  • Смешали NULL значения: NULL AND TRUE и NULL OR TRUE могут вести себя неожиданно

Представим, что мама проверяет холодильник:

  • У неё есть список продуктов, которые могут испортиться: молоко, яйца, йогурт

  • Она хочет приготовить что-то, если и молоко, и яйца в наличии → AND

  • Она хочет перекусить, если есть молоко или йогурт → OR

В SQL это выглядит так:

-- Для приготовления омлета

SELECT *

FROM fridge

WHERE product = 'milk' AND product = 'eggs';

-- Для перекуса

SELECT *

FROM fridge

WHERE product = 'milk' OR product = 'yogurt';

AND и OR — это простые, но мощные инструменты фильтрации. Правильное использование скобок и понимание приоритета операторов помогает избежать ошибок и выбирать точно те данные, которые нужны.

А в своем канале На связи: SQL я публикую информацию с особенностями и нюансами в языке SQL, разбираю аналитические запросы и подходы работы с данными. Канал создала недавно с нулем подписчиков, но там уже есть интересная информация для работы аналитиков. Подписывайся!

Показать полностью
[моё] Аналитика Эмоциональное выгорание Аналитик Системный аналитик SQL Microsoft Excel Таблица Данные База данных IT
1
6
VelStyling
VelStyling
15 дней назад
Серия SQL: знакомство

WHERE в SQL: как домохозяйка наводит порядок в холодильнике⁠⁠

Каждый из нас ежедневно сталкивается с бытовыми вопросами. У вас огромный холодильник: продукты, напитки, соусы, остатки вчерашнего ужина. Каждый день нужно понять: что из этого пригодно к употреблению сегодня, что нужно использовать для обеда, а что отправить в мусор.

WHERE в SQL: как домохозяйка наводит порядок в холодильнике Аналитика, Эмоциональное выгорание, Услуги, SQL, Microsoft Excel, Аналитик, Данные, База данных, Запросы, IT, Смена профессии, Длиннопост

Вот тут и появляется WHERE. Это фильтр, который помогает выбрать именно нужные строки из таблицы — или продукты из холодильника.

А в своем канале На связи: SQL я публикую информацию с особенностями и нюансами в языке SQL, разбираю аналитические запросы и подходы работы с данными. Канал создала недавно с нулем подписчиков, но там уже есть интересная информация для работы аналитиков. Подписывайся!

Нам нужно выкинуть все продукты, у которых истек срок годности:

SELECT *
FROM fridge
WHERE expiry_date < CURRENT_DATE;

fridge — наша таблица с продуктами
expiry_date < CURRENT_DATE — условие: выбираем просроченные продукты
CURRENT_DATE - текущая дата

Что можно писать в WHERE

  • Сравнения: =, >, <, >=, <=

  • Логические связки: AND, OR, NOT

  • Проверки на вхождение: IN, BETWEEN, LIKE

  • Подзапросы: «проверить список покупок перед выбором»

Или, мы хотим приготовить что-то на десерт:

SELECT *
FROM fridge
WHERE category = 'dessert' AND expiry_date > CURRENT_DATE;

Условие AND expiry_date > CURRENT_DATE добавляем на случай, если мы не выкинули всю просрочку до этого.

Подзапросы

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

SELECT *
FROM cooking_recipe
WHERE product NOT IN (SELECT product FROM fridge);

WHERE проверяет какие продукты отсутствуют в холодильнике.

Аналогично можно использовать EXISTS или NOT EXISTS
SELECT *
FROM fridge f
WHERE EXISTS (SELECT 1 FROM cooking_recipe s WHERE s.product = f.product);

EXISTS = есть продукт в списке
NOT EXISTS = нет продукта в списке

ANY \ ALL

Эти конструкции позволяют сравнивать с набором значений.

SELECT *
FROM fridge
WHERE expiry_date <= ALL (SELECT expiry_date FROM fridge WHERE category = 'milk');

Все хорошие домохозяйки используют принцип ротации. Выбирают продукты, срок годности которых меньше всех в категории “молоко”.

  • Подзапрос (SELECT expiry_date FROM fridge WHERE category = 'milk') возвращает даты всех банок молока.

  • Условие expiry_date <= ALL (...) означает: выбрать только те банки, у которых дата годности меньше или равна каждой другой банке молока.

  • Практически это банка (или несколько, если даты совпадают), которая старше всех остальных.

То есть, результат будет одна или несколько банок с самой ранней датой годности.

SELECT *
FROM fridge
WHERE expiry_date <= ANY (SELECT expiry_date FROM fridge WHERE category = 'milk');

  • Условие expiry_date <= ANY (...) означает: выбрать все банки молока, у которых дата годности меньше или равна хотя бы одной другой банке молока.

  • Тут почти все банки проходят условие, кроме самой свежей (если она самая большая по сроку).

  • Результат может быть несколько банок, не обязательно только одна. Все, кто «моложе или равны хотя бы одной другой», будут выбраны.

CASE в WHERE

Можно использовать CASE для сложной логики

SELECT *
FROM fridge
WHERE
CASE
WHEN product = 'milk' THEN shelf = 'top'
ELSE shelf = 'middle'
END;

Если я ищу молочные продукты в холодильнике, то должна их искать на самой верхней полке, иначе - на средней.


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

Показать полностью
[моё] Аналитика Эмоциональное выгорание Услуги SQL Microsoft Excel Аналитик Данные База данных Запросы IT Смена профессии Длиннопост
5
7
NinaYudina
NinaYudina
19 дней назад

На что была похожа база знаний в 1920 году⁠⁠

Наткнулась на это сейчас и долго хохотала.

В 1920 году двое энтузиастов решили создать первую в мире базу знаний. О чем? Обо всем на свете. И принялись собирать документы любого рода. И собирать, и собирать. А также классифицировать, чтобы любой житель мира мог быстро получить ответ на свой вопрос.

Короче, ребята придумали интернет за 65 лет до того, как он стал возможным (спросила чатик джипити, когда появился первый интернет - надеюсь, чатик ответил правильно). Вот так :))

Документов стало так много, что через 15 лет накопления и классификации «будущий интернет» захлебнулся. Но от него осталось 6 километров архивов. Где лежат 12 миллионов (!) документов и карточек.

Впечатляет. Респект ребятам. Интересно, дожили ли они до собственно интернета.

На что была похожа база знаний в 1920 году База данных, Интернет
База данных Интернет
3
2
IliaHohlov
IliaHohlov
21 день назад
Лига программистов

Рекомендации по написанию программного кода хранимых функций и процедур⁠⁠

Рекомендации по написанию программного кода хранимых функций и процедур Тестирование, Программирование, Собеседование, Автоматизация, IT, База данных, SQL

Чем больше нагрузка и больше одновременно выполняющихся транзакций, тем больше и ответственности при создании хранимых функций и процедур. Хорошо написанный программный код легко сопровождаем и не боится параллельной работы! Ниже собрал для вас основные рекомендации, которые важно учитывать при разработке хранимок (функций, процедур, триггеров).

1. Максимально эффективное обращение к данных (желательно всегда по первичным ключам и индексам);

2. Разделение сложных операций на более простые (сложный update, insert или delete с подзапросами можно упростить - сделать его по ключу, а данные, получаемые подзапросами, можно предварительно положить во временную таблицу или таблицу временного хранения данных);

3. Соблюдение идентичной последовательности работы с таблицами в разных функциях и процедурах (это позволит минимизировать вероятность взаимных блокировок);

4. Форматирование кода (соблюдение отступов, единое оформление, принятое в компании или в конкретной АС), использование регламентов оформления кода;

5. Соблюдение соответствия программы кода хранимки её назначению (процедура, открывающая вклад клиенту, должна открывать вклад клиенту и не должна дополнительно закрывать кредит);

6. Краткое и понятное комментирование неочевидных участков кода;

7. Идеальный код одной хранимки помещается на одном экране, чтобы не пришлось его прокручивать (конечно, на практике, это далеко не всегда так, но надо к этому стремиться). Если алгоритм большой, то его нужно разбивать на дополнительные функции и процедуры, которые можно использовать в коде основной функции/процедуры.

Буду рад лайку, если понравился материал! И еще напиши в комментарии какие приёмы при разработке хранимок используете Вы.

Показать полностью
[моё] Тестирование Программирование Собеседование Автоматизация IT База данных SQL
2
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии