← Назад к вопросам

SQL: Сравнение конверсии между устройствами

1.0 Junior🔥 271 комментариев
#SQL и базы данных#Метрики продукта

Условие

У вас есть таблица sessions:

  • session_id (integer)
  • user_id (integer)
  • device_type (varchar) - mobile, desktop, tablet
  • session_date (date)

И таблица conversions:

  • session_id (integer)
  • conversion_type (varchar)
  • revenue (decimal)

Сравните конверсию между типами устройств.

Ожидаемый результат:

Таблица с колонками: device_type, sessions_count, conversions_count, conversion_rate, avg_revenue

Источник: анализ по устройствам

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Решение

Это задача на сравнительный анализ по типам устройств — критична для оптимизации мобильного опыта.

SQL запрос для сравнения по устройствам:

SELECT 
  s.device_type,
  COUNT(DISTINCT s.session_id) as sessions_count,
  COUNT(DISTINCT CASE WHEN c.session_id IS NOT NULL THEN s.session_id END) as conversions_count,
  ROUND(100.0 * COUNT(DISTINCT CASE WHEN c.session_id IS NOT NULL THEN s.session_id END) / COUNT(DISTINCT s.session_id), 2) as conversion_rate,
  ROUND(AVG(c.revenue), 2) as avg_revenue,
  ROUND(SUM(c.revenue) / COUNT(DISTINCT s.session_id), 2) as revenue_per_session
FROM sessions s
LEFT JOIN conversions c ON s.session_id = c.session_id
GROUP BY s.device_type
ORDER BY conversion_rate DESC;

Вариант с дополнительной аналитикой:

WITH device_stats AS (
  SELECT 
    s.device_type,
    COUNT(DISTINCT s.session_id) as sessions_count,
    COUNT(DISTINCT s.user_id) as unique_users,
    COUNT(DISTINCT CASE WHEN c.session_id IS NOT NULL THEN s.session_id END) as conversions_count,
    ROUND(100.0 * COUNT(DISTINCT CASE WHEN c.session_id IS NOT NULL THEN s.session_id END) / COUNT(DISTINCT s.session_id), 2) as conversion_rate,
    ROUND(SUM(c.revenue) / COUNT(DISTINCT s.session_id), 2) as revenue_per_session,
    ROUND(SUM(c.revenue) / COUNT(DISTINCT s.user_id), 2) as revenue_per_user
  FROM sessions s
  LEFT JOIN conversions c ON s.session_id = c.session_id
  GROUP BY s.device_type
)
SELECT 
  device_type,
  sessions_count,
  unique_users,
  ROUND(sessions_count::NUMERIC / unique_users, 2) as sessions_per_user,
  conversions_count,
  conversion_rate,
  revenue_per_session,
  revenue_per_user
FROM device_stats
ORDER BY conversion_rate DESC;

Ожидаемый результат (типичный пример):

device_type | sessions_count | conversions_count | conversion_rate | avg_revenue | revenue_per_session
Desktop     | 50,000         | 2,500             | 5.00%           | $15.50      | $0.78
Mobile      | 120,000        | 3,600             | 3.00%           | $10.20      | $0.31
Tablet      | 30,000         | 900               | 3.00%           | $12.00      | $0.36

Ключевые метрики:

  1. Conversion Rate — какой % сессий привели к конверсии (Desktop выше)
  2. Revenue per Session — выручка на сессию (главная метрика)
  3. Revenue per User — среднее за пользователя
  4. Sessions per User — сколько сессий до конверсии

Анализ:

  • Desktop > Mobile — выше конверсия (5% vs 3%), но Mobile больше трафика
  • Mobile revenue — в 2.5x раз ниже per session (нужна оптимизация)
  • Tablet — промежуточный вариант

Что проверить при разнице:

  1. Мобильная форма — медленная? Клавиатура мешает?
  2. Платёжные методы — Apple Pay/Google Pay на мобильных?
  3. Дизайн — отзывчивый ли (responsive)?

Применение:

  • Мобильный приоритет — 70% трафика обычно с мобильных
  • A/B тесты отдельно для Mobile и Desktop
  • Оптимизировать Mobile для +1% конверсии = +$X в выручке