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

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

Екатерина Фадеева Ученик (121), на голосовании 10 месяцев назад
Давайте проверим, связан ли небольшой провал конверсии в марте с количеством уникальных покупателей. Рассчитайте показатель MAU: количество уникальных покупателей для января, февраля и марта.
Отобразите в таблице месяц в виде первой даты и MAU. Отсортируйте таблицу по месяцу в порядке возрастания.Усечь месяц до первой даты можно при помощи DATE_TRUNC.
мой запрос:
SELECT
DATE_TRUNC('month', date),
COUNT(DISTINCT bracelet_id)AS MAU
FROM pizza
WHERE EXTRACT(day FROM date) = 01
and EXTRACT (month from date) = 01
or EXTRACT (month from date) = 02
or EXTRACT (month from date) = 03
GROUP BY DATE_TRUNC('month',date)
ORDER BY DATE_TRUNC('month',date) ASC

Пишет: результат не совпадает с ожидаемым
Дополнен 11 месяцев назад
Решил
SELECT
DATE_TRUNC('month', date) AS JFM,
COUNT(DISTINCT bracelet_id)AS MAU
FROM pizza
WHERE DATE_TRUNC('month', date) >= '2022-01-01' and DATE_TRUNC('month', date) <= '2022-03-01'
GROUP BY JFM
ORDER BY JFM ASC
Голосование за лучший ответ
Андрей Слегкин Оракул (58054) 11 месяцев назад
1) Зачем числа месяца пишешь с ведущим нулём (01, 02, 03).
Доиграишься с таким написанием чисел! Некоторые языки программирования при ведущем нуле считают число в восьмеричном формате! И если для 01 это не критично (оно посчитает его числом - 1), то для 011 это уже будет не 11, а 9! А на 08 и 09 вообще может ошибку выдать.

2) у SQL довольно своеобразный приоритет у and и or (не такой как в 99% языках программирования где они равнозначны), в sql and имеет выше приоритет чем or.
В результате у тебя берёт только первое число первого месяца, или любое число других месяцев. Если в этом не разбираешься - ставь скобки!
В твоём случае
 ...01  
and (EXTRACT...
АндрейВысший разум (460806) 11 месяцев назад
В подавляющем большинстве языков программирования приоритет AND (логическое умножение) выше приоритета OR (логическое сложение).
Андрей Слегкин Оракул (58054) Андрей, ни в одном известном мне языке программирования кроме SQL нет приоритета and над or. Они всегда равнозначны, хотя иногда and и or имеют выше приоритет чем «равно», но и это не всегда.
GIOУченик (206) 8 месяцев назад
Подскажите плиз, что не так в моем запросе? Условие:
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
Roys Профи (511) 6 месяцев назад
SELECT DATE_TRUNC('month', date), COUNT(DISTINCT bracelet_id)
FROM pizza
WHERE EXTRACT(MONTH FROM date) < 4
GROUP BY DATE_TRUNC('month', date)
ORDER BY DATE_TRUNC('month', date) ASC
Жорик Ученик (126) 3 месяца назад
SELECT DATE_TRUNC('month',date), COUNT(DISTINCT bracelet_id) FROM pizza
WHERE (EXTRACT (MONTH FROM date) >= 1 and EXTRACT (MONTH FROM date) <= 3)
GROUP BY DATE_TRUNC('month',date)
1337 Профи (648) 3 месяца назад
SELECT DATE_TRUNC('month', date) AS month,
COUNT(DISTINCT bracelet_id)
FROM pizza
WHERE EXTRACT(MONTH FROM DATE_TRUNC('month', date)) IN (1,2,3)
GROUP BY month
ORDER BY month
Похожие вопросы