Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Написать запрос SQL

GIO Ученик (206), на голосовании 7 месяцев назад
Подскажите плиз, что не так в моем запросе? Условие:
1. Ранее мы обращали внимание, что конверсия немного упала в марте. Рассчитайте показатель DAU за март: узнайте количество уникальных покупателей в этом месяце.
Отобразите дату и количество уникальных покупателей. Отсортируйте таблицу по дате в порядке возрастания.
Запрос SQL:
SELECT DATE_TRUNC('day', date),
COUNT(DISTINCT bracelet_id) AS DAU
FROM pizza
WHERE EXTRACT(MONTH FROM date)=3
GROUP BY DATE_TRUNC('day', date)
ORDER BY DATE_TRUNC('day', date) ASC
Дополнен 8 месяцев назад
Исследователь ответов, спасибо за ответ. Но яндекс практикуму (забыл уточнить, что условие взято из курса) всё равно не нравится запрос и пишет следующее -
Полученный результат не совпадает с ожидаемым. Например строка 1, колонка day:
2022-03-01 00:00:00+03:00 | 13
Порядок сортировки имеет значение.
У колонки day тип не совпадает с ожидаемым.
Дополнен 8 месяцев назад
забыл написать, база данных содержит инфу за 2022 год
Голосование за лучший ответ
Беспрекословный Эксперт Мыслитель (6516) 8 месяцев назад
В вашем SQL-запросе основная логика корректна для расчета количества уникальных покупателей (DAU) за каждый день в марте. Вы правильно используете функцию DATE_TRUNC для группировки данных по дням, а также COUNT(DISTINCT bracelet_id) для подсчета уникальных покупателей. Однако, есть несколько моментов, которые могут вызвать ошибку или привести к неправильным результатам, в зависимости от СУБД, которую вы используете, и структуры ваших данных.

Название столбца: Убедитесь, что bracelet_id действительно является идентификатором покупателей. Это может быть опечатка, и вы имели в виду другое поле, например, customer_id или что-то подобное, что действительно указывает на уникального покупателя.

Условие фильтрации по месяцу: Ваш фильтр WHERE EXTRACT(MONTH FROM date)=3 корректно работает для выделения дат марта любого года. Если вам нужны данные только за март конкретного года, следует добавить условие фильтрации по году, например:
 AND EXTRACT(YEAR FROM date) = 2023  
Производительность: Ваш запрос должен работать нормально, но если таблица pizza очень большая, использование функций типа DATE_TRUNC и EXTRACT в условиях GROUP BY и ORDER BY может снизить производительность. Убедитесь, что на поле date установлены соответствующие индексы, чтобы оптимизировать выполнение запроса.

Семантическая ошибка: Проверьте, правильно ли название таблицы pizza отражает данные, с которыми вы работаете. Возможно, есть более подходящая таблица для анализа покупок.

Исходя из вышеуказанных замечаний, ваш запрос выглядит корректным для задачи. Если вы столкнулись с ошибкой или некорректными результатами, проверьте указанные моменты. Вот исправленный вариант запроса с учетом года:
 SELECT DATE_TRUNC('day', date) AS day,    
COUNT(DISTINCT bracelet_id) AS DAU
FROM pizza
WHERE EXTRACT(MONTH FROM date) = 3 AND EXTRACT(YEAR FROM date) = 2023
GROUP BY day
ORDER BY day ASC;
Обратите внимание на добавленное условие фильтрации по году и на то, что алиас day используется для упрощения GROUP BY и ORDER BY (убедитесь, что ваша СУБД поддерживает такой синтаксис).
Похожие вопросы