Собесов

SQL — доля target=1 в разрезе категорий образования

SQLГруппировка и агрегатыЛёгкаяMiddle

Условие

В таблице task_1 есть колонки EDUCATION (категория образования: 2/3/4/5/6) и бинарный target (0/1). Посчитайте долю target=1 в каждой категории образования с округлением до 2 знаков.

Решение

Подход

Доля единичек в бинарной колонке считается как SUM(target)/COUNT(target) или эквивалентно AVG(target). Главное — понимать поведение типа: если target целочисленный, нужно либо привести к numeric/float, либо домножить на 1.0.

Реализация

Эталон из ответов автора задачи:

SELECT
  education,
  ROUND(SUM(target) * 1.0 / COUNT(target), 2) AS target_ratio
FROM task_1
GROUP BY education
ORDER BY education;

Эквивалент через AVG (более лаконично, но требует типа с дробной частью):

SELECT
  education,
  ROUND(AVG(target::numeric), 2) AS target_ratio
FROM task_1
GROUP BY education
ORDER BY education;

Развёрнутый вариант с FILTER

Если нужно ещё и абсолютные числа — удобно через FILTER:

SELECT
  education,
  COUNT(*)                                              AS total,
  COUNT(*) FILTER (WHERE target = 1)                    AS positives,
  ROUND(COUNT(*) FILTER (WHERE target = 1) * 1.0 / COUNT(*), 2) AS target_ratio
FROM task_1
GROUP BY education
ORDER BY education;

Подводные камни

  1. Целочисленное деление. В Postgres SUM(target)/COUNT(target) при целочисленных типах вернёт 0 для всех «не 100%». Спасают * 1.0, ::numeric или AVG.
  2. NULL в target. COUNT(target) не считает NULL, а SUM(target) тоже их игнорирует — это корректное поведение. А вот COUNT(*) посчитает строки с NULL, и доля поедет.
  3. Несбалансированные группы. Если в категории всего 3–5 человек, доля «не значима» статистически. На презентации стоит добавить колонку с размером выборки.
  4. Сортировка. Без ORDER BY категории идут в произвольном порядке. Для презентации добавляйте ORDER BY education или сортировку по доле.

Эталонный ответ

SELECT education, ROUND(SUM(target) / COUNT(target), 2) AS target_ratio
FROM task_1
GROUP BY education;

Категории с высоким target_ratio — самые «склонные к 1» сегменты. Это полезный baseline перед обучением модели и отправная точка для сегментации.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти