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

Вопрос по SQL

Оксана Голыжбина Ученик (107), на голосовании 1 год назад
На сколько процентов менялось количество постов ежемесячно с 1 сентября по 31 декабря 2008 года? Отобразите таблицу со следующими полями:
номер месяца;
количество постов за месяц;
процент, который показывает, насколько изменилось количество постов в текущем месяце по сравнению с предыдущим.
Если постов стало меньше, значение процента должно быть отрицательным, если больше — положительным. Округлите значение процента до двух знаков после запятой.
Напомним, что при делении одного целого числа на другое в PostgreSQL в результате получится целое число, округлённое до ближайшего целого вниз. Чтобы этого избежать, переведите делимое в тип numeric.

posts

id Идентификатор поста, первичный ключ таблицы
title Заголовок поста
creation_date Дата создания поста
user_id Идентификатор пользователя, который создал пост, внешний ключ к таблице
Голосование за лучший ответ
Black Afgano Просветленный (22302) 2 года назад
 SELECT
month
, posts_count
, ROUND(100 * (LAG(posts_count) OVER(ORDER BY month)
- posts_count)::NUMERIC / posts_count, 2) AS pct_change
FROM (
SELECT
DATE_PART('month', creation_date) AS month
, COUNT(*) AS posts_count
FROM posts
WHERE creation_date >= '2008-09-01'
AND creation_date < '2009-01-01'
GROUP BY 1
) AS t
Оксана ГолыжбинаУченик (107) 2 года назад
спасибо решила
Евелина Бладина Ученик (114) 6 месяцев назад
WITH monthly_posts AS (
SELECT
DATE_PART('month', p.creation_date) AS month_num,
COUNT( p.id ) AS post_count
FROM stackoverflow.posts p
WHERE p.creation_date BETWEEN '2008-09-01' AND '2008-12-31'
GROUP BY DATE_PART('month', p.creation_date)
ORDER BY month_num
)

SELECT
month_num,
post_count,
ROUND(
CASE WHEN prev_post_count = 0 THEN 0
ELSE (post_count - prev_post_count) * 100.0 / prev_post_count
END,
2
) AS percent_change
FROM (
SELECT
*,
LAG(post_count, 1) OVER (ORDER BY month_num) AS prev_post_count
FROM monthly_posts
) t
Похожие вопросы