SQLHUB Telegram 1896
🎯 SQL-задача с подвохом для аналитиков

Таблица sales:


CREATE TABLE sales (
id SERIAL PRIMARY KEY,
seller_name VARCHAR,
sale_amount NUMERIC,
sale_date DATE
);


📌 Задача:
Найди имя продавца, который заработал максимальную сумму за каждый месяц.

🧠 Подвох:
Многие пытаются использовать GROUP BY month, seller_name и MAX(), но это не даст имя продавца — только сумму. Нужно вернуть имя лучшего продавца за месяц. А если таких несколько? Тоже учти.

💡 Подсказки:

• Сначала сгруппируй продажи по month и seller_name
• Посчитай SUM(sale_amount)
• Используй оконную функцию RANK() или ROW_NUMBER()
• Отфильтруй только те строки, где rank = 1

🧩 Решение:


WITH monthly_totals AS (
SELECT
DATE_TRUNC('month', sale_date) AS month,
seller_name,
SUM(sale_amount) AS total
FROM sales
GROUP BY 1, 2
),
ranked AS (
SELECT *,
RANK() OVER (PARTITION BY month ORDER BY total DESC) AS rnk
FROM monthly_totals
)
SELECT month, seller_name, total
FROM ranked
WHERE rnk = 1
ORDER BY month;


👀 Бонус-вопрос:
Что будет, если у двух продавцов одинаковая сумма за месяц?
Какой оконной функцией это корректно учесть?

👉 RANK() вернёт обоих, ROW_NUMBER() — только одного.

📌 Отличная задача, чтобы проверить знание оконных функций и работы с агрегацией в SQL.

@sqlhub
12👍6🔥4👎1



tgoop.com/sqlhub/1896
Create:
Last Update:

🎯 SQL-задача с подвохом для аналитиков

Таблица sales:


CREATE TABLE sales (
id SERIAL PRIMARY KEY,
seller_name VARCHAR,
sale_amount NUMERIC,
sale_date DATE
);


📌 Задача:
Найди имя продавца, который заработал максимальную сумму за каждый месяц.

🧠 Подвох:
Многие пытаются использовать GROUP BY month, seller_name и MAX(), но это не даст имя продавца — только сумму. Нужно вернуть имя лучшего продавца за месяц. А если таких несколько? Тоже учти.

💡 Подсказки:

• Сначала сгруппируй продажи по month и seller_name
• Посчитай SUM(sale_amount)
• Используй оконную функцию RANK() или ROW_NUMBER()
• Отфильтруй только те строки, где rank = 1

🧩 Решение:


WITH monthly_totals AS (
SELECT
DATE_TRUNC('month', sale_date) AS month,
seller_name,
SUM(sale_amount) AS total
FROM sales
GROUP BY 1, 2
),
ranked AS (
SELECT *,
RANK() OVER (PARTITION BY month ORDER BY total DESC) AS rnk
FROM monthly_totals
)
SELECT month, seller_name, total
FROM ranked
WHERE rnk = 1
ORDER BY month;


👀 Бонус-вопрос:
Что будет, если у двух продавцов одинаковая сумма за месяц?
Какой оконной функцией это корректно учесть?

👉 RANK() вернёт обоих, ROW_NUMBER() — только одного.

📌 Отличная задача, чтобы проверить знание оконных функций и работы с агрегацией в SQL.

@sqlhub

BY Data Science. SQL hub


Share with your friend now:
tgoop.com/sqlhub/1896

View MORE
Open in Telegram


Telegram News

Date: |

Matt Hussey, editorial director at NEAR Protocol also responded to this news with “#meIRL”. Just as you search “Bear Market Screaming” in Telegram, you will see a Pepe frog yelling as the group’s featured image. Ng was convicted in April for conspiracy to incite a riot, public nuisance, arson, criminal damage, manufacturing of explosives, administering poison and wounding with intent to do grievous bodily harm between October 2019 and June 2020. But a Telegram statement also said: "Any requests related to political censorship or limiting human rights such as the rights to free speech or assembly are not and will not be considered." The court said the defendant had also incited people to commit public nuisance, with messages calling on them to take part in rallies and demonstrations including at Hong Kong International Airport, to block roads and to paralyse the public transportation system. Various forms of protest promoted on the messaging platform included general strikes, lunchtime protests and silent sit-ins. With the administration mulling over limiting access to doxxing groups, a prominent Telegram doxxing group apparently went on a "revenge spree."
from us


Telegram Data Science. SQL hub
FROM American