Трюк дня. Найти медиану
Предположим, есть таблица, содержащая в столбце sales такие записи:
2, 1, 3, 8, 7, 5.
Необходимо найти медиану для данного столбца.
Решение:
В PostgreSQL используйте функцию percentile_count:
В MS SQL также используйте функцию percentile_count:
В PARTITION BY можно внести столбец, по которому группируются данные. В данном случае мы использовали 1, чтобы посчитать медиану по всем данным столбца.
В Oracle используйте функцию MEDIAN:
Однако в MySQL подобных функций нет. Поэтому медиану нужно вычислять самостоятельно.
Напомним: медиана - это число, которое находится в середине набора чисел, отсортированных по возрастанию.
Ответ: медиана = 4.
#tips
Предположим, есть таблица, содержащая в столбце sales такие записи:
2, 1, 3, 8, 7, 5.
Необходимо найти медиану для данного столбца.
Решение:
В PostgreSQL используйте функцию percentile_count:
SELECT percentile_cont (0.5) WITHIN GROUP (ORDER BY sales) FROM table;
В MS SQL также используйте функцию percentile_count:
SELECT percentile_cont (0.5) WITHIN GROUP (ORDER BY sales) OVER (PARTITION BY 1) FROM table;
В PARTITION BY можно внести столбец, по которому группируются данные. В данном случае мы использовали 1, чтобы посчитать медиану по всем данным столбца.
В Oracle используйте функцию MEDIAN:
SELECT MEDIAN (sales) OVER (PARTITION BY 1) FROM table; Однако в MySQL подобных функций нет. Поэтому медиану нужно вычислять самостоятельно.
Напомним: медиана - это число, которое находится в середине набора чисел, отсортированных по возрастанию.
/*задаем переменную row_index = -1, чтобы отсчет индекса начался с 0 */
SET @row_index := -1;
/*находим среднее двух значений в центре отсортированного набора. Охватывает те случаи, когда общее число записей четное*/
SELECT AVG (subq.sales) as median_value
FROM (
SELECT @row_index:=@row_index + 1 AS row_index, sales
FROM table
ORDER BY sales
) AS subq
WHERE subq.row_index
/*выбираем только значения в центре: одно если число записей нечетное и два если четное*/
IN (FLOOR(@row_index / 2) , CEIL(@row_index / 2));
Ответ: медиана = 4.
#tips
🔥4
Какой знак в запросах с использованием LIKE соответствует произвольному количеству символов в строке?
Anonymous Quiz
79%
%
1%
-
1%
|
1%
/
14%
*
5%
Посмотреть ответы
Трюк дня. Сравнение с предыдущим
Напишите SQL-запрос, который находит в таблице
Решение будет вечером.
#tips
Напишите SQL-запрос, который находит в таблице
weather все даты (идентификаторы дат), когда температура была бы выше температуры на предшествующие им даты. То есть, нас интересуют даты, в которые «сегодняшняя» температура выше «вчерашней».Решение будет вечером.
#tips
👍1
Трюк дня. Сравнение с предыдущим. Решение.
Решение: использование
Если сформулировать обычным языком следующий запрос, то окажется, что он выражает следующую идею: нужно выбрать такие идентификаторы, чтобы температура, соответствующая представляемым ими датам, была бы больше, чем температура на «вчерашние» по отношению к ним даты.
#tips
Решение: использование
DATEDIFF
DATEDIFF: эта функция вычисляет разницу между двумя датами. Она используется для того, чтобы обеспечить сравнение именно «сегодняшних» и «вчерашних» температур.Если сформулировать обычным языком следующий запрос, то окажется, что он выражает следующую идею: нужно выбрать такие идентификаторы, чтобы температура, соответствующая представляемым ими датам, была бы больше, чем температура на «вчерашние» по отношению к ним даты.
SELECT DISTINCT a.Id
FROM Weather a, Weather b
WHERE a.Temperature > b.Temperature
AND DATEDIFF(a.Recorddate, b.Recorddate) = 1
#tips
👍7
Какой результат вернет следующий PostgreSQL/MySQL запрос:
SELECT GREATEST (6.62, - 8, '82');
SELECT GREATEST (6.62, - 8, '82');
Anonymous Quiz
24%
6.62
3%
- 8
25%
82
32%
Ошибка
16%
Посмотреть ответы
This media is not supported in your browser
VIEW IN TELEGRAM
🚀 Разобраться в современном data-engineering-стеке — это возможность выйти на новый уровень в аналитике и научиться работать с инфраструктурой, которую сегодня используют крупнейшие компании.
📅 2 декабря в 19:00 МСК — открытый урок «Data Engineering & Analytics: от данных к бизнес-инсайтам» в рамках курса «Data Warehouse Analyst. Advanced». За один вечер разберём всё самое важное:
🔹 Архитектуру хранилищ и потоковую обработку данных
🔹 Сравним аналитические СУБД: Greenplum и ClickHouse
🔹 Покажем подходы Data Vault 2.0
🔹 Роль Spark и Kafka в аналитике
🔹 Как Python, Pandas и Scikit-learn помогают строить модели
После урока у вас будет чёткое понимание:
✔️ Какие навыки нужны Data Engineer и Data Analyst
✔️ Как организовать полный цикл работы с данными
✔️ Как формируются инсайты, влияющие на решения бизнеса
🔗 Регистрация по ссылке: https://vk.cc/cRGZcp
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
📅 2 декабря в 19:00 МСК — открытый урок «Data Engineering & Analytics: от данных к бизнес-инсайтам» в рамках курса «Data Warehouse Analyst. Advanced». За один вечер разберём всё самое важное:
🔹 Архитектуру хранилищ и потоковую обработку данных
🔹 Сравним аналитические СУБД: Greenplum и ClickHouse
🔹 Покажем подходы Data Vault 2.0
🔹 Роль Spark и Kafka в аналитике
🔹 Как Python, Pandas и Scikit-learn помогают строить модели
После урока у вас будет чёткое понимание:
✔️ Какие навыки нужны Data Engineer и Data Analyst
✔️ Как организовать полный цикл работы с данными
✔️ Как формируются инсайты, влияющие на решения бизнеса
🔗 Регистрация по ссылке: https://vk.cc/cRGZcp
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Что покажет следующий запрос:
select * from Orders where date between '2017-01-01' and '2017-12-31'
select * from Orders where date between '2017-01-01' and '2017-12-31'
Anonymous Quiz
3%
Все данные по заказам, совершенным за 2017 год, за исключением 01 января 2017 года
19%
Все данные по заказам, совершенным за 2017 год, за исключением 31 декабря 2017 года
67%
Все данные по заказам, совершенным за 2017 год
7%
Ничего: запрос составлен неверно
4%
Посмотреть ответ
👎6
Трюк дня. Извлечение имени, отчества и фамилии из строки с полным именем
В столбце
Напишите MySQL-запрос, который извлечет
Например, из 'Alena Igorevna Petrova' должны получиться 3 столбца:
А из строки 'Jack Powers' получится следующее:
Решение будет вечером.
#tips
В столбце
fullname таблицы customers содержится имя, отчество и фамилия в следующем формате: 'name middlename surname'.Напишите MySQL-запрос, который извлечет
name, middlename и surname в отдельные столбцы. Если middlename не существует, то в результате в middlename должен быть NULL.Например, из 'Alena Igorevna Petrova' должны получиться 3 столбца:
• name = 'Alena', • middlename = 'Igorevna', • surname = 'Petrova'. А из строки 'Jack Powers' получится следующее:
• name = 'Jack', • middlename = NULL, • surname = 'Powers'.Решение будет вечером.
#tips
Трюк дня. Извлечение имени, отчества и фамилии из строки с полным именем. Решение.
#tips
SELECT
SUBSTRING_INDEX (SUBSTRING_INDEX (fullname, ' ', 1), ' ', -1) AS name,
IF (LENGTH (fullname) - LENGTH (REPLACE (fullname, ' ', '')) > 1,
SUBSTRING_INDEX(SUBSTRING_INDEX (fullname, ' ', 2), ' ', -1), NULL)
AS middlename,
SUBSTRING_INDEX (SUBSTRING_INDEX (fullname, ' ', 3), ' ', -1) AS surname
FROM customers;
#tips
👍3
Решение сегодняшней задачи на логику и мышление.
Вместо знака вопроса должно стоять число 179. Если двигаться по часовой стрелке начиная с 3, то каждое последующее число равно удвоенному предыдущему, к которому прибавили 1, 3, 5, 7, 9.
3 × 2 + 1 = 7.
7 × 2 + 3 = 17.
17 × 2 + 5 = 39.
39 × 2 + 7 = 85.
85 × 2 + 9 = 179.
#логика
Вместо знака вопроса должно стоять число 179. Если двигаться по часовой стрелке начиная с 3, то каждое последующее число равно удвоенному предыдущему, к которому прибавили 1, 3, 5, 7, 9.
3 × 2 + 1 = 7.
7 × 2 + 3 = 17.
17 × 2 + 5 = 39.
39 × 2 + 7 = 85.
85 × 2 + 9 = 179.
#логика
Трюк дня. Простые числа. Решение.
Простое число - натуральное (целое положительное) число, имеющее ровно два различных натуральных делителя — единицу и самого себя.
Для начала создадим набор чисел от 2 до 1000 с помощью функции
Простое число - натуральное (целое положительное) число, имеющее ровно два различных натуральных делителя — единицу и самого себя.
Для начала создадим набор чисел от 2 до 1000 с помощью функции
generate_series.
Затем с помощью NOT EXISTS (которое можно, модифицировав, заменить на JOIN) мы соединяем таблицу саму на себя и затем выбираем только те значения, для которых ни одно деление на меньшее число не дает остаток 0.
WITH x AS (
SELECT * FROM generate_series( 2, 1000 ) x
)
SELECT x.x
FROM x
WHERE NOT EXISTS (
SELECT 1 FROM x y
WHERE x.x > y.x AND x.x % y.x = 0
);
#tipsИз-за какого слова в коде MySQL выдаст ошибку?
Anonymous Quiz
10%
INTO
8%
city
30%
key
4%
VALUES
37%
Код не содержит ошибок
11%
Ничего из перечисленного
Трюк дня. Сравнение значений столбцов
Перепишите PostgreSQL запрос так, чтобы не использовать оператор
#tips
Перепишите PostgreSQL запрос так, чтобы не использовать оператор
AND. WITH users (id, surname)
AS (VALUES
(1, 'Powers'),
(2, 'Sierra'),
(3, 'Oushen'))
SELECT id, surname
FROM users
WHERE id = 2 AND surname = 'Sierra';
Решение будет вечером. #tips
👎2
Задача на мышление и логику.
Дано 12 монет, из которых 11 – настоящие, и только 1 – фальшивая. Фальшивая монета отличается от настоящих по массе. Какое минимальное количество взвешиваний необходимо, чтобы обнаружить фальшивую монету? Для взвешивания используются чашечные весы.
Решение будет вечером.
#логика
Дано 12 монет, из которых 11 – настоящие, и только 1 – фальшивая. Фальшивая монета отличается от настоящих по массе. Какое минимальное количество взвешиваний необходимо, чтобы обнаружить фальшивую монету? Для взвешивания используются чашечные весы.
Решение будет вечером.
#логика
Решение сегодняшней задачи на логику и мышление.
Минимальное количество взвешиваний – 3, ведь даже если мы взвесим 2 раза, то как мы узнаем, какая из монет фальшивая? Большую часть монет составляют настоящие, так что 2 монеты с одинаковым весом и будут настоящими, третья с другим весом – фальшивой.
Ответ: 3 взвешивания.
#логика
Минимальное количество взвешиваний – 3, ведь даже если мы взвесим 2 раза, то как мы узнаем, какая из монет фальшивая? Большую часть монет составляют настоящие, так что 2 монеты с одинаковым весом и будут настоящими, третья с другим весом – фальшивой.
Ответ: 3 взвешивания.
#логика
👍2👎1
В высоконагруженных системах он всё чаще становится частью AI-архитектуры — с векторами, семантическим поиском и RAG-паттернами прямо на уровне БД.
На открытом уроке разберём, как PostgreSQL может:
- работать вместе с AI-моделями: хранить эмбеддинги, участвовать в семантическом поиске,
- быть частью RAG-архитектур и выполнять ML-логику внутри базы.
- отдельно обсудим расширения pgvector, pgai и lantern
- обсудим реальные сценарии для production-систем.
Вы увидите где AI в базе данных действительно оправдан, а где создаёт риски по латентности, масштабированию и поддержке.
Разберём архитектурные trade-off’ы, работу с kNN-поиском и подходы к интеграции AI в бизнес-логику через триггеры и функции.
Регистрация открыта: https://vk.cc/cTNmpK
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
SELECT fname, lname, state FROM authors WHERE state NOT IN ('NY', 'NJ', 'CA')
Какой запрос из списка эквивалентен запросу из задачи?
Какой запрос из списка эквивалентен запросу из задачи?
Anonymous Quiz
59%
SELECT fname, lname, state FROM authors WHERE state <> 'NY' AND state <> 'NJ' AND state <> 'CA'
36%
SELECT fname, lname, state FROM authors WHERE state <> 'NY' OR state <> 'NJ' OR state <> 'CA'
2%
SELECT fname, lname, state FROM authors WHERE state <> 'NY' AND state <> 'NJ' OR state <> 'CA'
3%
SELECT fname, lname, state FROM authors WHERE state <> 'NY' OR state <> 'NJ' AND state <> 'CA'
1%
Посмотреть ответ