Найдите общее количество загрузок для платных и бесплатных пользователей по дате. Включайте только те записи, в которых неоплачиваемые клиенты имеют больше загрузок, чем платные клиенты. Вывод должен быть сначала отсортирован по самой ранней дате и содержать дату в 3 столбцах, бесплатные загрузки, платные загрузки.
ms_user_dimension
user_id:int
acc_id:int
ms_acc_dimension
acc_id:int
paying_customer:varchar
ms_download_facts
date:datetime
user_id:int
downloads:int
Ответ
with out AS(select date
, Sum (downloads) Filter(Where paying_customer = 'no') as non_paying
, Sum (downloads) Filter(Where paying_customer = 'yes') as paying
From ms_download_facts fact
Left Join ms_user_dimension a
on fact.user_id = a.user_id
Join ms_acc_dimension acc
on a.acc_id = acc.acc_id
Group by date
order by date)
Select date , non_paying , paying
From out
Where non_paying > paying
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤2🔥1
Когда вы только начинаете изучать SQL, нужно как можно больше практики. Хорошо, когда есть реальные задачи на работе, на которых можно практиковаться. Но если их нет - то эти бесплатные сервисы помогут получить необходимую практику и улучшить свой уровень.
Кстати, в телеграм канале у меня был пост о том, как выучить SQL быстрее, его вы можете посмотреть тут.
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤4🔥2
📌 Основы SQL (видеокурс)
1 – Введение
2 – Нормализация
3 – Редактирование таблиц, расширенные возможности SELECT, функции
4 – Триггеры
5 – Транзакции
#course
@sqlhub
1 – Введение
2 – Нормализация
3 – Редактирование таблиц, расширенные возможности SELECT, функции
4 – Триггеры
5 – Транзакции
#course
@sqlhub
YouTube
Основы SQL - #1 – Введение
Освой профессию frontend-разработчика за 6 месяцев и становись востребованным IT-специалистом со знанием топовых технологий и 5 крутыми проектами в портфолио:
https://loftschool.com/professions/frontend-developer/?utm_source=youtube&utm_medium=article&utm_campaign=sql1…
https://loftschool.com/professions/frontend-developer/?utm_source=youtube&utm_medium=article&utm_campaign=sql1…
👍14❤6🔥1
В порядке изучения с "нуля":
https://sqlzoo.net/ еще несколько тренажеров с задачками для прокачивания практических навыков
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥7❤1
🚀 Big Data - действительно полезный канал для всех, кто работает с данными.
- огромный набор бесплатных наборов данных
- инструменты для работы с данными
- обучающие материалы для датасаентистов
- лучшие практики Машинного Обучения
- перевод книг и статей
🔥 Подписаться
- огромный набор бесплатных наборов данных
- инструменты для работы с данными
- обучающие материалы для датасаентистов
- лучшие практики Машинного Обучения
- перевод книг и статей
🔥 Подписаться
👍6❤1🔥1
Найдите среднее количество ванных комнат и спален для каждого типа собственности в городе. Выведите результат вместе с названием города и типом недвижимости.
airbnb_search_details
id:int
price:float
property_type:varchar
room_type:varchar
amenities:varchar
accommodates:int
bathrooms:int
bed_type:varchar
cancellation_policy:varchar
cleaning_fee:bool
city:varchar
host_identity_verified:varchar
host_response_rate:varchar
host_since:datetime
neighbourhood:varchar
number_of_reviews:int
review_scores_rating:float
zipcode:int
bedrooms:int
beds:int
Ответ
SELECT city, property_type, avg(bedrooms) as n_bedrooms_avg, avg(bathrooms) as n_bathrooms_avg
FROM airbnb_search_details
GROUP BY city, property_type
ORDER BY city
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14👍10🔥3
Airtable представляет собой платформу из разряда low-code, т.е. практически не требует написания программного кода. Она позволяет любому создавать реляционные базы и визуализировать данные, не требуя для этого даже знания SQL и Excel.
Подумайте, сколько времени вы бы потратили на выполнение следующего задания:
создать базу данных с записями;
выбрать конкретные данные по заданным условиям;
отобразить отфильтрованные данные в виде диаграммы (столбчатой, круговой);
поделиться данными проекта онлайн.
Задание простое и выполнимое посредством Excel. Но оно имеет тенденцию к усложнению и, как следствие, требует больше времени. Выбирая Airtable, вы получаете значительное преимущество: сразу начинаете работать с удобным онлайн GUI.
В статье мы рассмотрим основные преимущества и возможности Airtable на практическом примере.
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤2🔥2
🗄️⚠️ Как намеренно расставленные ошибки помогают сделать SQL-код легко поддерживаемым
В этой статье мы рассмотрим различные способы вызова ошибок, которые помогут упростить поддержку SQL-кода в будущем.
➡️ Читать дальше
@sqlhub
В этой статье мы рассмотрим различные способы вызова ошибок, которые помогут упростить поддержку SQL-кода в будущем.
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3🔥1
Напишите запрос, вычисляющий разницу между самыми высокими зарплатами в отделах маркетинга и инженерии. Выведите только абсолютную разницу в зарплатах.
db_employee
id:int
first_name:varchar
last_name:varchar
salary:int
department_id:int
db_dept
id:int
department:varchar
Ответ:
select abs(max(salary) filter (where department = 'marketing') - max(salary) filter (where department = 'engineering'))
from db_employee emp
LEFT JOIN db_dept dept on emp.department_id = dept.id
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤3🔥1
Найдите самую высокую цель, достигнутую сотрудником или сотрудниками, работающими под менеджером с id 13. Выведите имя сотрудника/сотрудников и достигнутую цель. Решение должно показывать самую высокую цель, достигнутую при manager_id=13, и какие сотрудники ее достигли.
salesforce_employees
id:int
first_name:varchar
last_name:varchar
age:int
sex:varchar
employee_title:varchar
department:varchar
salary:int
target:int
bonus:int
email:varchar
city:varchar
address:varchar
manager_id:int
Ответ:
select first_name, target
from salesforce_employees
where manager_id=13 and
target=(select max(target) from salesforce_employees where manager_id=13)
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤4🔥2
Найдите сотрудника с самой высокой зарплатой в каждом отделе. Выведите название отдела, имя сотрудника и соответствующую зарплату.
employee
id:int
first_name:varchar
last_name:varchar
age:int
sex:varchar
employee_title:varchar
department:varchar
salary:int
target:int
bonus:int
email:varchar
city:varchar
address:varchar
manager_id:int
ОТВЕТ:
SELECT department as department,
first_name as employee_name,
salary
FROM employee
WHERE (department, salary) IN
(SELECT department, MAX(salary)
FROM employee
GROUP BY department)
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥2❤1
Дана база данных.
Найдите модели принтеров, имеющих самую высокую цену. Вывести: model, price
Задача обычно не вызывает затруднений, однако, иногда встречаются решения подобные следующему:
SELECT model, MAX(DISTINCT price)
FROM Printer
GROUP BY model;
Понятно естественное желание решить задачу без подзапросов. Если бы требовалось вывести только максимальную цену, то тогда группировка была бы не нужна, так как максимум находился бы по всему набору принтеров:
SELECT MAX(price)
FROM Printer;
Однако в задаче требуется вывести еще и номер (номера) модели, имеющей максимальную цену. Поскольку мы не можем в предложении SELECT использовать агрегатные значения наряду с детализированными (если не использовать группировку по детализированным значениям), то в результате и получаем представленное выше неправильное решение с группировкой по модели. Это решение дает максимальную цену по каждой модели, нам же нужно получить модели, которые имеют абсолютную (по всему набору принтеров) максимальную цену.
Итак, приходится использовать подзапрос, в котором вычисляется максимальная цена:
SELECT model, price
FROM Printer
WHERE price = (SELECT MAX(price)
FROM Printer
);
При этом подзапрос может вводиться не только с простым оператором сравнения («=»), но и с предложением IN или >= ALL.
Подзапрос можно использовать и в предложении FROM:
SELECT model, price
FROM Printer pr, (SELECT MAX(price) AS maxprice
FROM Printer
) AS mp
WHERE price = mp.maxprice;
Однако это не дает выигрыша в производительности, так как в любом случае вычисление подзапроса выполняется один раз, а потом уже производится сравнение цен для каждой строки.
Пишите в комментариях , можно ли решить задачу без подзапроса?
Ставьте ❤️, если интересно увидеть решение.
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17👍8🔥1
Forwarded from Анализ данных (Data analysis)
Еще порядка 10 лет назад для работы по исследованию данных было достаточно SQL, как инструмента для выборки данных и формирования отчетов по ним. Но время не стоит на месте, и примерно в 2012 году стала стремительно набирать популярность Python-библиотека Pandas. И вот сегодня уже сложно представить работу Data Scientist’а без данного модуля.
Не буду подробно углубляться в то, что предоставляют из себя оба инструмента ввиду их популярности среди аналитиков и исследователей данных, но небольшую справку все-таки оставлю:
Итак, SQL (язык структурированных запросов — от англ. Structed Query Language) — это декларативный язык программирования, применяемый для получения и обработки данных с помощью создания запросов внешне похожих по синтаксису на предложения, написанные на английском языке.
Pandas — это модуль для обработки и анализа данных в табличном формате и формате временных рядов на языке Python. Библиотека работает поверх математического модуля более низкого уровня NumPy. Название модуля происходит от эконометрического понятия «панельные данные» (или как его еще называют «лонгитюдные данные» — это данные, которые состоят из повторяющихся наблюдений одних и тех же выбранных единиц, при этом наблюдения производятся в последовательные периоды времени).
@data_analysis_ml
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3🔥2
Решить задачу без использования подзапроса можно. Правда, для этого используются нестандартные средства. Метод основывается на конструкции TOP N (SQL Server), которая позволяет отобрать из отсортированного набора первые N строк. Аналогичные конструкции имеются в диалектах SQL многих СУБД. В комитете по разработке стандартов было даже зафиксировано предложение о включение подобной конструкции в стандарт языка. Так что не исключено, что к моменту выхода этой книги в свет данная конструкция уже будет стандартизована. А вот и решение:
SELECT TOP 1 WITH TIES model, price
FROM Printer
ORDER BY price DESC;
Итак, выполняется сортировка по убыванию цены. В результирующий набор попадает одна (первая — TOP 1) строка. Однако остается проблема, когда несколько принтеров из таблицы будут иметь одинаковую максимальную цену. Проблема решается при помощи предложения WITH TIES, которое включит в результирующий набор не только N строк (в нашем случае одну), но и все ниже идущие строки, у которых значения в полях сортировки (у нас — price) совпадают со значениями N-ой строки (у нас — первой).
В PostgreSQL/MySQL для ограничения количества строк, возвращаемых запросом, используется конструкция (следующая после ORDER BY)
LIMIT N [OFFSET M]
где
N - число первых строк, возвращаемых запросом в порядке, заданном сортировкой;
M - число строк, пропускаемых перед началом вывода.
Если предложение OFFSET отсутствует, то выводиться будут N строк, начиная с первой, в противном случае - N строк, начиная с M+1.
Конструкций, подобных WITH TIES, в этих СУБД нет. Поэтому для решения рассматриваемой задачи способом через сортировку так или иначе придется использовать подзапрос:
SELECT model, price
FROM Printer WHERE price =
(SELECT price FROM Printer ORDER BY price DESC LIMIT 1);
Заметим, что в отличие от MySQL, в PostgreSQL предложение OFFSET может использоваться и при отсутствии предложения LIMIT. В этом случае возвращаться будут все строки запроса кроме первых M. Так, например, чтобы вывести все строки кроме первой строки с максимальной ценой, можно написать:SELECT model, price
FROM Printer
ORDER BY price DESC OFFSET 1;
model price
1401 150.00
1408 270.00
1433 270.00
1434 290.00
При использовании SQL Server эту же задачу можно решить так:
SELECT model, price
FROM Printer WHERE code NOT IN(
SELECT TOP 1 code
FROM Printer
ORDER BY price DESC);
Т.е. мы выбираем все строки, кроме той, которая идёт первой при сортировке цены по убыванию.
А теперь попробуйте решить эту задачу под MySQL. 🙂
При решении последней задачи следует обратить внимание на неточность ее постановки. В результате чего представленное решение на одних и тех же данных может давать разные результаты при разных запусках. В частности, у нас имеется две строки с максимальной ценой, и какая из них будет выводиться зависит от порядка, в котором СУБД будет извлекать строки. А этот порядок может меняться в зависимости от выбранного оптимизатором плана. Чтобы сделать постановку и результат! однозначными, следует указать в условии задачи однозначный порядок сортировки. Эту однозначность всегда обеспечит включение первичного ключа в конец списка столбцов сортировки, например:
ORDER BY price DESC, code
или
ORDER BY price DESC, model, code
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤5🔥3
Многие сталкивались с проблемами в работе инструментов для управления базами данных. То графический интерфейс долго загружается, то зависает в самый ненужный момент, или просто нет нормальной возможности выгрузить результат в файл. Основные проблемы связаны с нагромождением дополнительного функционала, который в большинстве случаев не нужен.
При работе с СУБД GreenPlum или PostgreSQL, как правило, в качестве инструментов управления базами данных используют pgAdmin или Dbeaver. Это хорошие и универсальные инструменты, однако, за универсальность приходится платить скоростью запроса к БД и работой приложения в целом.
Я расскажу, как зная SQL и десяток консольных команд, можно значительно ускорить выполнение запросов в GreenPlum с помощью PSQL.
PSQL — это терминальный клиент для работы с PostgreSQL. Он позволяет вводить запросы в интерактивном режиме, отправлять их в PostgreSQL и просматривать результаты запроса. Так как GreenPlum основан на PostgreSQL, то PSQL работает и с ним.
Устанавливается PSQL при установке PostgreSQL — называется Command Line Tools, в случае Greenplum PSQL устанавливается с pgAdmin. Для его запуска надо открыть командную строку в папке с psql.exe (например, при установке PostgreSQL путь PostgreSQL\14\bin\psql.exe). C PSQL можно работать в двух режимах:
интерактивный
из командной строки (не интерактивный)
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍3❤1
Также как небольшие улучшения повышают качество запросов, так и мелкие некорректные навыки могут снизить качество и понятность кода в долгосрочной перспективе.
Следовательно, пора избавиться от непродуктивных навыков SQL, а взамен сформировать новые и эффективные. Этим мы сейчас и займемся.
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍6❤1
Найти идентификатор с максимальным значением
depname | empno | salary |
-----------+-------+--------+
develop | 11 | 5200 |
develop | 7 | 4200 |
develop | 9 | 4500 |
develop | 8 | 6000 |
develop | 10 | 5200 |
personnel | 5 | 3500 |
personnel | 2 | 3900 |
sales | 3 | 4800 |
sales | 1 | 5000 |
sales | 4 | 4800 |
Задача: написать запрос, чтобы получить empno с самой высокой зарплатой. Убедитесь, что ваше решение обрабатывает случаи одинаковых зарплатами!
Решение:
WITH max_salary AS (
SELECT
MAX(salary) max_salary
FROM
salaries
)
SELECT
s.empno
FROM
salaries s
JOIN
max_salary ms ON s.salary = ms.max_salary
Альтернативное решение с использованием RANK():
WITH sal_rank AS
(SELECT
empno,
RANK() OVER(ORDER BY salary DESC) rnk
FROM
salaries)
SELECT
empno
FROM
sal_rank
WHERE
rnk = 1;
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤2🔥1
Шпаргалки помогут:
- подготовиться к экзамену
- подготовиться к собеседованию
- в повседневной работе – быстро вспомнить нужную информацию
Сохраняйте себе, чтобы не потерять
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤2🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 English for Developers -канал поможет быстро выучить технический английский.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1🔥1