Задача: recyclable and low fat products.
Ссылка: [Link]
Условие задачи:
Write a solution to find the ids of products that are both low fat and recyclable.
Return the result table in any order.
The result format is in the following example.
a solution - решение (В1)
both - оба, и тот и другой (А1)
order - порядок, последовательность (В1)
Под «оба» значит, что они должны быть, а не их значения равны. То есть должно
быть в обоих колонках Y.
Решение:
SELECT products_id
FROM products
WHERE low_fats = “Y” AND recyclable = “Y”
● Пока при работе с одной таблицей можно обращаться просто к заголовкам
столбцов не указывая повторно название таблицы.
● Также в sql нет == нужно использовать именно =
Разбор решения через pandas.
df = products[(products['low_fats'] == 'Y') & (products['recyclable'] == 'Y')]
● Формируем новый dataframe (мы его называем сокращенно df)
● products['low_fats'] - таблица[название колонки] то есть мы оставляем только
строчки, которые подходят нам под условие.
● & - оператор «И»
Выражение products['low_fats'] == 'Y' создает «маску» — список из True и
False для каждой строки.
Когда ты передаешь эту итоговую маску в products[...], Pandas оставляет
только те строки, где значение было True.
df = df[['product_id']]
Используем чтобы получить только 1 конкретную для нас колонку.
Итоговый код на Python:
import pandas as pd
def find_products(products: [Link]) -> [Link]:
df = products[(products['low_fats'] == 'Y') & (products['recyclable'] == 'Y')]
df = df[['product_id']]
return df
Метод .loc — это «профессиональный» способ доступа к данным. Его
синтаксис: [Link][строки, столбцы].
АЛЬТЕРНАТИВНЫЙ КОД КОДА ВЫШЕ:
# .loc[ КТО ПОДХОДИТ , КАКОЙ СТОЛБЕЦ НУЖЕН ]
[Link][
(products['low_fats'] == 'Y') & (products['recyclable'] == 'Y'),
['product_id']
]
Задача: recyclable and low fat products.
Ссылка: [Link]
Условие задачи:
Find the names of the customer that are either:
1. referred by any customer with id != 2.
2. not referred by any customer.
Return the result table in any order.
The result format is in the following example.
● customer - покупатель, клиент (а2)
● either - тот или другой, любой (из двух) (в1)
● refer - упоминать кого-либо / что-либо (в2)
○ referred by - направленный
Решение:
SELECT name
FROM customer
WHERE referee_id != 2 OR referee_id IS NULL
● название_столбца IS NULL - выводит нам те ячейки из столба значения в
которых равняется NULL.
В MySQL есть три типа результата при проверке:
1. True
2. False
3. Null
Поэтому, когда мы говорим, что id не равен числу, у нас также отпадают все
ячейки, которые будут NULL. Поэтому есть свой оператор для проверки на
NULL.
● IS NULL
● IS NOT NULL
Также в MySQL есть два способа записи не равно:
1. !=
2. <>
Разбор решения через pandas:
● таблица[‘название_столбца’].isnull() - выводит true/false для каждой
ячейки столбца. True будет только у ячеек у которых значение было
NULL.
Итоговый код на Python:
import pandas as pd
def find_customer_referee(customer: [Link]) -> [Link]:
return [Link][
(customer[‘referee_id’] != 2) | (customer[‘referee_id’].isnull()),
[‘name’]
]
Задача: big countries.
Ссылка: [Link]
Условие задачи:
A country is big if:
● it has an area of at least three million (i.e., 3000000 km2), or
● it has a population of at least twenty-five million (i.e., 25000000).
Write a solution to find the name, population, and area of the big countries.
Return the result table in any order.
The result format is in the following example.
● least - не менее
Решение:
SELECT name, population, area
FROM world
WHERE area >= 3000000 OR population >= 2500000
Разбор решения через pandas:
import pandas as pd
def big_countries(world: [Link]) -> [Link]:
return [Link][
(world['area'] >= 3000000) | (world['population'] >= 25000000),
['name', 'population', 'area']
]
● Даже когда у нас нужно вывести несколько столбцов данных, мы все равно
используем перечисление в массиве, просто название полей через запятую.
Задача: Article views 1
Ссылка: [Link]
Условие задачи:
Write a solution to find all the authors that viewed at least one of their own
articles.
Return the result table sorted by id in ascending order.
The result format is in the following example.
● own - свой собственный (а2)
Решение:
SELECT DISTINCT author_id as id
FROM views
WHERE author_id = viewer_id
ORDER BY author_id
● DISTINCT поле - делает чтобы при выборке показывались только 1 раз
строка без дублей.
● ORDER BY поле - делает сортировку по возрастанию.
○ ORDER BY поле ACS - сортировка по возрастанию
○ ORDER BY поле DESC - сортировка по убыванию
Разбор решения через pandas:
import pandas as pd
def article_views(views: [Link]) -> [Link]:
df = views[ (views['author_id']) == (views['viewer_id']) ]
df = df.sort_values(by='author_id', ascending=[True])
df = df.drop_duplicates(subset=['author_id'], keep='first')
df = [Link](columns={'author_id': 'id'})
return df[['id']]
Более ровное решение от ИИ:
import pandas as pd
def article_views(views: [Link]) -> [Link]:
# 1. Фильтруем: автор сам посмотрел свою статью
df = views[views['author_id'] == views['viewer_id']]
# 2. Оставляем только нужный столбец и удаляем дубликаты
# Сразу переименовываем через .rename
df = df[['author_id']]
.drop_duplicates()
.rename(columns={'author_id': 'id'})
# 3. Сортируем уже рочищенный результат
return df.sort_values(by='id')
● колонка.drop_duplicates() - удалять дублирующие строки
● колонка.rename(columns={'author_id': 'id'}) - переименовываем колонку
● колонка.sort_values(by='id') - сортировка по возрастания опираясь на
указанную колонку
Задача: [Link]
Условие задачи:
Write a solution to find the IDs of the invalid tweets. The tweet is invalid if the
number of characters used in the content of the tweet is strictly greater than 15.
Return the result table in any order.
The result format is in the following example.
● invalid - не корректный
● strictly - строго, исключительно
● greater - превосходно
Решение на sql:
SELECT tweet_id
FROM tweets
WHERE LENGTH(content) > 15;
● LENGTH(название колонки) - возвращает длину символов для каждой строки в
колонке.
Решение на pandas:
import pandas as pd
def invalid_tweets(tweets: [Link]) -> [Link]:
return [Link][
tweets['content'].[Link]() > 15,
['tweet_id']
]
● колонка.[Link]() - выводит длину для каждой строки в колонке. str
является обязательным, иначе код выдаёт ошибку.
Write a solution to show the unique ID of each user, If a user does not have a unique ID replace
just show null.
Return the result table in any order.
The result format is in the following example.
Решение:
SELECT unique_id, name
FROM employeeUNI
RIGHT JOIN employees
ON [Link] = [Link];
● Можно написать таблица псевдоним - employee e
Pandas:
df_total = [Link](df2, on='id', how='inner')
Параметр how определяет логику объединения, как в SQL:
● how='inner': только общие строки (по умолчанию).
● how='left': все строки из левой таблицы + совпадения из правой.
● how='right': все из правой + совпадения из левой.
● how='outer': вообще всё (аналог FULL OUTER JOIN).
import pandas as pd
def replace_employee_id(employees: [Link], employee_uni: [Link]) ->
[Link]:
df_total = [Link](employee_uni, on='id', how='left')
return df_total[['unique_id', 'name']]
def replace_employee_id(employees: [Link], employee_uni: [Link]) ->
[Link]:
# Можно сразу вернуть результат объединения, выбрав нужные столбцы
return [Link](employee_uni, on='id', how='left')[['unique_id', 'name']]