Справочное руководство по отчетам панели администратора

:bookmark: Это справочное руководство по описанию работы отчётов панели администратора, данных, которые они отображают, соответствующих SQL-запросов Data Explorer и местоположения Ruby-кода для каждого отчёта.

:person_raising_hand: Требуемый уровень доступа: Сотрудник

Discourse включает несколько встроенных отчётов панели администратора, которые могут быть полезны для анализа статистики сообщества. Чтобы получить доступ к этим отчётам, перейдите по адресу discourse.example.com/admin/dashboard/reports на вашем сайте (или нажмите на ссылку Отчёты в верхней части панели управления). Обратите внимание, что доступ к этим отчётам имеют только сотрудники.

В эти отчёты включены данные всех пользователей сайта (включая активность сотрудников, например, посещение страниц администрирования). Единственное условие для пользователей в отчётах — они должны быть «реальными» пользователями, что используется для исключения пользователя system из отчётов.

Плагины также могут добавлять отчёты в панель управления с помощью add_report(name, &block).

:gem: Ruby-модели для большинства отчётов находятся здесь: discourse/app/models/concerns/reports/. Некоторые отчёты также ссылаются на: discourse/app/models/report.rb

:bulb: Темы с тегом dashboard-sql содержат все соответствующие SQL-запросы, которые можно использовать для генерации отчётов, идентичных отчётам панели администратора. Эти запросы можно использовать в плагине Data Explorer и для запуска запросов Data Explorer через API Discourse.

:wrench: Чтобы скрыть определённые отчёты из панели управления, используйте параметр сайта dashboard_hidden_reports.

Принятые решения

Ежедневный подсчёт сообщений, отмеченных как принятые решения.

Ruby-код: discourse-solved/plugin.rb at main · discourse/discourse-solved · GitHub

SQL-запрос: Dashboard Report - Accepted Solutions

Входы администраторов

Список времени входов администраторов с указанием местоположения.

Ruby-код: discourse/app/models/concerns/reports/staff_logins.rb

SQL-запрос: Dashboard Report - Admin Logins

Анонимные пользователи

Количество новых просмотров страниц посетителями, не вошедшими в систему.

Ruby-код: discourse/app/models/concerns/reports/consolidated_page_views.rb

SQL-запрос: Dashboard Report - Anonymous

Закладки

Количество новых тем и сообщений, добавленных в закладки.

Ruby-код: discourse/app/models/concerns/reports/bookmarks.rb

SQL-запрос: Dashboard Report - Bookmarks

Объединённые запросы к API

Статистика использования API по датам, отслеживающая как обычные запросы к API, так и запросы от пользователей.

Ruby-код: discourse/app/models/concerns/reports/consolidated_api_requests.rb at main · discourse/discourse · GitHub

SQL-запрос: Dashboard Report - Consolidated API Requests

Объединённые просмотры страниц

Просмотры страниц авторизованными пользователями, анонимными пользователями и роботами. Это устаревший отчёт, заменённый отчётом Трафик сайта.

Ruby-код: discourse/app/models/concerns/reports/consolidated_page_views.rb

SQL-запрос: Dashboard Report - Consolidated Pageviews

Объединённые просмотры страниц с определением браузера (Устарело)

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

Ruby-код: discourse/app/models/concerns/reports/consolidated_page_views_browser_detection.rb

SQL-запрос: Dashboard Report - Consolidated Pageviews with Browser Detection

DAU/MAU

Количество участников, вошедших в систему за последний день, делённое на количество участников, вошедших за последний месяц — возвращает процент, указывающий на «липкость» сообщества. Цель — >20%.

Ruby-код: discourse/app/models/concerns/reports/dau_by_mau.rb

SQL-запрос: Dashboard Report - DAU/MAU

Ежедневные активные пользователи

Количество пользователей, которые поставили лайк или опубликовали сообщение за последний день.

Ruby-код: discourse/app/models/concerns/reports/daily_engaged_users.rb

SQL-запрос: Dashboard Report - Daily Engaged Users

Отправленные электронные письма

Количество новых отправленных электронных писем.

Ruby-код: discourse/app/models/concerns/reports/emails.rb

SQL-запрос: Dashboard Report - Emails Sent

Флаги

Количество новых флагов.

Ruby-код: discourse/app/models/concerns/reports/flags.rb

SQL-запрос: Dashboard Report - Flags

Статус флагов

Список статусов флагов, включая тип флага, автора, автора флага и время до разрешения.

Ruby-код: discourse/app/models/concerns/reports/flags_status.rb

SQL-запрос: Dashboard Report - Flags Status

Лайки

Количество новых лайков.

Ruby-код: discourse/app/models/concerns/reports/likes.rb

SQL-запрос: Dashboard Report - Likes

Авторизованные пользователи

Количество новых просмотров страниц авторизованными пользователями.

Ruby-код: discourse/app/controllers/admin/reports_controller.rb#L5

SQL-запрос: Dashboard Report - Logged In

Активность модераторов

Список активности модераторов, включая рассмотренные флаги, время чтения, созданные темы, созданные сообщения, созданные личные сообщения и правки.

SQL-запрос: Dashboard Report - Moderator Activity

Предупреждения модераторов

Количество предупреждений, отправленных через личные сообщения модераторами.

Ruby-код: discourse/app/models/concerns/reports/moderator_warning_private_messages.rb

SQL-запрос: Dashboard Report - Moderator Warnings

Новые участники

Количество пользователей, сделавших своё первое сообщение в этот период.

Ruby-код: discourse/app/models/concerns/reports/new_contributors.rb

SQL-запрос: Dashboard Report - New Contributors

Уведомление модераторов

Количество раз, когда модераторы получали частные уведомления от флага.

Ruby-код: discourse/app/models/concerns/reports/notify_moderators_private_messages.rb

SQL-запрос: Dashboard Report - Notify Moderators

Уведомление пользователя

Количество раз, когда пользователи получали частные уведомления от флага.

Ruby-код: discourse/app/models/concerns/reports/notify_user_private_messages.rb

SQL-запрос: Dashboard Report - Notify User

Общий тон

Количество сообщений, классифицированных как позитивные или негативные с помощью ИИ «Sentiment» за указанный период.

Ruby-код: discourse-ai/lib/sentiment/entry_point.rb at main · discourse/discourse-ai · GitHub

SQL-запрос: Отчёт панели — Общий тон

Просмотры страниц

Количество новых просмотров страниц всеми посетителями. То же, что и общее количество в отчёте «Объединённые просмотры страниц».

Discourse использует следующий запрос для определения общего количества просмотров страниц:

SQL-запрос: Dashboard Report - Consolidated Pageviews

Правки сообщений

Количество новых правок сообщений.

Ruby-код: discourse/app/models/concerns/reports/post_edits.rb

SQL-запрос: Dashboard Report - Post Edits

Сообщения

Новые сообщения, созданные в выбранный период времени.

Ruby-код: discourse/app/models/concerns/reports/posts.rb

SQL-запрос: Dashboard Report - Posts

Эмоции в сообщениях

Количество сообщений, классифицированных ИИ по следующим эмоциям: Грусть, Удивление, Страх, Гнев, Радость, Отвращение — группировка по уровню доверия автора за указанный период.

Ruby-код: discourse-ai/lib/sentiment/entry_point.rb at main · discourse/discourse-ai · GitHub

SQL-запрос: Отчёт панели — Эмоции в сообщениях

Реакции

Список последних реакций.

Ruby-код: discourse-reactions/plugin.rb at main · discourse/discourse-reactions · GitHub

SQL-запрос: Dashboard Report - Reactions

Регистрации

Новые регистрации аккаунтов за этот период.

Ruby-код: discourse/app/models/concerns/reports/signups.rb

SQL-запрос: Dashboard Report - Signups

Трафик сайта

Просмотры страниц авторизованными браузерами, анонимными браузерами, роботами и другим трафиком. Это основной отчёт о трафике, заменяющий устаревшие отчёты «Объединённые просмотры страниц».

Ruby-код: discourse/app/models/concerns/reports/site_traffic.rb

SQL-запрос: Отчёт панели — Трафик сайта

Подозрительные входы

Детали новых входов, которые подозрительно отличаются от предыдущих входов.

Ruby-код: discourse/app/models/concerns/reports/suspicious_logins.rb

SQL-запрос: Dashboard Report - Suspicious Logins

Система

Количество личных сообщений, автоматически отправленных Системой.

Ruby-код: discourse/app/models/concerns/reports/system_private_messages.rb

SQL-запрос: Dashboard Report - System

Время до первого ответа

Среднее время (в часах) до первого ответа на новые темы.

Ruby-код: discourse/app/models/concerns/reports/time_to_first_response.rb + discourse/discourse/blob/main/app/models/topic.rb#L1799-L1844

SQL-запрос: Dashboard Report - Time to First Response

Самые игнорируемые / заглушенные пользователи

Пользователи, которые были заглушены и/или игнорированы многими другими пользователями.

Ruby-код: discourse/app/models/concerns/reports/top_ignored_users.rb

SQL-запрос: Dashboard Report - Top Ignored / Muted Users

Самые упоминаемые темы

Темы, получившие наибольшее количество кликов из внешних источников.

Ruby-код: discourse/app/models/concerns/reports/top_referred_topics.rb

SQL-запрос: Dashboard Report - Top Referred Topics

Главные источники переходов

Пользователи, отсортированные по количеству кликов по ссылкам, которые они поделились.

Ruby-код: discourse/app/models/concerns/reports/top_referrers.rb

SQL-запрос: Dashboard Report - Top Referrers

Главные источники трафика

Внешние источники, которые чаще всего ссылались на этот сайт.

Ruby-код: discourse/app/models/concerns/reports/top_traffic_sources.rb

SQL-запрос: Dashboard Report - Top Traffic Sources

Главные загрузки

Список всех загрузок по расширению, размеру файла и автору.

Ruby-код: discourse/app/models/concerns/reports/top_uploads.rb

SQL-запрос: Dashboard Report - Top Uploads

Главные пользователи по полученным лайкам

10 лучших пользователей, получивших лайки.

Ruby-код: discourse/app/models/concerns/reports/top_users_by_likes_received.rb

SQL-запрос: Dashboard Report - Top Users by Likes Received

Главные пользователи по полученным лайкам от пользователя с более низким уровнем доверия

10 лучших пользователей с более высоким уровнем доверия, получивших лайки от людей с более низким уровнем доверия.

Ruby-код: discourse/app/models/concerns/reports/top_users_by_likes_received_from_inferior_trust_level.rb

SQL-запрос: Dashboard Report - Top Users by Likes Received from a User with a Lower Trust Level

Главные пользователи по полученным лайкам от разнообразных людей

10 лучших пользователей, получивших лайки от широкого круга людей.

Ruby-код: discourse/app/models/concerns/reports/top_users_by_likes_received_from_a_variety_of_people.rb

SQL-запрос: Dashboard Report - Top Users by Likes Received From a Variety of People

Темы

Новые темы, созданные в этот период.

Ruby-код: discourse/app/models/concerns/reports/topics.rb

SQL-запрос: Dashboard Report - Topics

Темы без ответа

Количество новых созданных тем, не получивших ответа.

Ruby-код: discourse/app/models/concerns/reports/topics_with_no_response.rb

SQL-запрос: Dashboard Report - Topics with No Response

Статистика просмотров тем

100 лучших тем по количеству просмотров с разбивкой по анонимным и авторизованным пользователям, с возможностью фильтрации по категории.

Ruby-код: discourse/app/models/concerns/reports/topic_view_stats.rb

SQL-запрос: Отчёт панели — Статистика просмотров тем

Популярные поисковые запросы

Самые популярные поисковые запросы с их показателями кликабельности.

Ruby-код: discourse/app/models/concerns/reports/trending_search.rb

SQL-запрос: Dashboard Report - Trending Search Terms

Рост уровня доверия

Количество пользователей, повысивших свой уровень доверия в этот период.

Отчёт «Рост уровня доверия» извлекает данные из таблицы user_histories в базе данных Discourse. Конкретно, этот отчёт подсчитывает количество случаев, когда записывается user_histories.action для повышения уровня доверия пользователя.

Ruby-код: discourse/app/models/concerns/reports/trust_level_growth.rb

SQL-запрос: Dashboard Report - Trust Level Growth

Непринятые политики

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

Ruby-код: discourse-policy/plugin.rb at main · discourse/discourse-policy · GitHub

SQL-запрос: Dashboard Report - Unaccepted Policies

Соотношение флагов пользователей

Список пользователей, отсортированный по соотношению ответов сотрудников на их флаги (несогласие к согласию).

Ruby-код: discourse/app/models/concerns/reports/user_flagging_ratio.rb

SQL-запрос: Dashboard Report - User Flagging Ratio

Заметки о пользователях

Список последних заметок о пользователях.

Ruby-код: discourse-user-notes/plugin.rb at main · discourse/discourse-user-notes · GitHub

SQL-запрос: Dashboard Report - User Notes

Просмотры профилей пользователей

Общее количество новых просмотров профилей пользователей.

Ruby-код: discourse/app/models/concerns/reports/profile_views.rb

SQL-запрос: Dashboard Report - User Profile Views

Посещения пользователями

Общее количество посещений авторизованными пользователями форума в выбранный период времени (сегодня, вчера, последние 7 дней и т. д.).

Посещение пользователя засчитывается каждый раз, когда уникальный авторизованный пользователь посещает сайт, максимум один раз в день. Например, если пользователь посещал сайт каждый день в течение недели, Discourse засчитает это как 7 посещений.

Ruby-код: discourse/app/models/concerns/reports/visits.rb

SQL-запрос: Dashboard Report - User Visits

Посещения пользователями (мобильные)

Количество уникальных авторизованных пользователей, посетивших сайт с мобильного устройства.

Ruby-код: discourse/app/models/concerns/reports/mobile_visits.rb

SQL-запрос: Dashboard Report - User Visits

Пользователь-Пользователь (без ответов)

Количество новых инициированных личных сообщений.

Ruby-код: discourse/app/models/concerns/reports/user_to_user_private_messages.rb

SQL-запрос: Dashboard Report - User-to-User

Пользователь-Пользователь (с ответами)

Количество всех новых личных сообщений и ответов.

Ruby-код: discourse/app/models/concerns/reports/user_to_user_private_messages_with_replies.rb

SQL-запрос: Dashboard Report - User-to-User

Пользователи по уровню доверия

Количество пользователей, сгруппированных по уровню доверия.

Ruby-код: discourse/app/models/concerns/reports/users_by_trust_level.rb

SQL-запрос: Dashboard Report - Users Per Trust Level

Пользователи по типу

Количество пользователей, сгруппированных по типам: администратор, модератор, заблокированный, заглушенный.

Ruby-код: discourse/app/models/concerns/reports/users_by_type.rb

SQL-запрос: Dashboard Report - Users Per Type

Просмотры страниц веб-роботами

Общее количество просмотров страниц веб-роботами с течением времени.

Ruby-код: discourse/app/models/report.rb

SQL-запрос: Dashboard Report - Web Crawler Pageviews

User Agents веб-роботов

Список user agents веб-роботов, отсортированный по количеству просмотров страниц.

Ruby-код: discourse/app/models/concerns/reports/web_crawlers.rb

SQL-запрос: Dashboard Report - Web Crawler User Agents

18 лайков

Я не вижу ссылки на это на странице /admin. Я что-то упускаю? Казалось бы, это должно быть более заметным. Мне казалось, что я знал, что эти отчёты находятся здесь, но искал и не мог их найти.

Хотя мне потребовалось всего несколько минут, чтобы найти их, было бы неплохо добавить что-то вроде:

3 лайка

Да, было бы неплохо упомянуть их в личном сообщении сотрудникам при создании нового сайта. :thinking:

1 лайк

:лицо_плачущего_кота:

Извините. Я точно думал, что видел это где-то раньше.

Людей просто невозможно заставить читать текст. . . .Разве что я могу прочитать исходный код, чтобы узнать, как это сделать в плагине?

Но, возможно, стоит обновить вышеуказанное так:

Кажется, именно это меня и сбило с толку. (Но нет, у меня нет оправданий.)

Я сделал тему вики-страницей, действуйте! :+1:

2 лайка

Это не соответствует интерфейсу (в интерфейсе указано 20%). Какое значение правильное?

2 лайка

Отличное замечание. Недавно это было обновлено до 20%. Я внесу изменения в исходный пост. :slight_smile: :+1:

2 лайка

Привет, @SaraDev. Можно ли получить вывод этого отчёта с помощью SQL-запроса? Можете ли вы поделиться им?
Спасибо

1 лайк

Да, для отчёта по основным источникам трафика можно использовать следующий SQL-запрос:

-- [params]
-- date :start_date = 01/05/2023
-- date :end_date = 03/06/2023

WITH count_links AS (
  
SELECT COUNT(*) AS clicks,
       ind.name AS domain
FROM incoming_links il
  INNER JOIN posts p ON p.deleted_at ISNULL AND p.id = il.post_id
  INNER JOIN topics t ON t.deleted_at ISNULL AND t.id = p.topic_id
  INNER JOIN incoming_referers ir ON ir.id = il.incoming_referer_id
  INNER JOIN incoming_domains ind ON ind.id = ir.incoming_domain_id
WHERE t.archetype = 'regular'
  AND il.created_at::date BETWEEN :start_date AND :end_date 
GROUP BY ind.name
ORDER BY clicks DESC
), 

count_topics AS (
  
SELECT COUNT(DISTINCT p.topic_id) AS topics,
       ind.name AS domain
FROM incoming_links il
INNER JOIN posts p ON p.deleted_at ISNULL AND p.id = il.post_id
INNER JOIN topics t ON t.deleted_at ISNULL AND t.id = p.topic_id
INNER JOIN incoming_referers ir ON ir.id = il.incoming_referer_id
INNER JOIN incoming_domains ind ON ind.id = ir.incoming_domain_id
WHERE t.archetype = 'regular'
  AND il.created_at > (CURRENT_TIMESTAMP - INTERVAL '30 DAYS')
GROUP BY ind.name
) 

SELECT cl.domain, 
       cl.clicks AS "Clicks", 
       ct.topics AS "Topics"
FROM count_links cl
JOIN count_topics ct ON cl.domain = ct.domain
LIMIT 10

Обратите внимание, что в этом запросе параметры даты должны быть в формате день/месяц/год.

1 лайк

Привет @SaraDev, спасибо за предоставление запроса.
У меня более общий вопрос по этому отчёту и таблице incoming_links — она отражает трафик только на страницы постов, а не трафик на все страницы форума, верно?

Контекст: я хочу проанализировать тренды общего трафика форума и надеялся получить данные по общему трафику по источникам из отчёта «Источники основного трафика».
Но при этом общий трафик за последний месяц составляет около 272 тыс. (пользователи и анонимы), а общее количество кликов в отчёте по источникам трафика за тот же период — всего 59 тыс.
Также я заметил, что вы используете INNER JOIN с таблицами topics и posts, что означает: если к клику не привязан post_id, он не учитывается.

Не могли бы вы подтвердить мой вывод и, возможно, немного объяснить логику работы таблицы incoming_links?

Привет, @SaraDev! Я выполнил этот запрос, и результат не точно совпадает с отчётом «Сообщения» на вкладке «Общее».
Например, за 30 ноября:
Запрос = 112 сообщений
Отчёт = 120 сообщений
Не могли бы вы проверить эту разницу?
Спасибо

1 лайк

Просто к сведению @Yotam_Hagay — даже если Сара является автором темы (OP), руководство — это ответственность всех :slight_smile: :discourse: Не нужно помечать каждого @упоминанием в каждом сообщении. :slight_smile:

2 лайка

Спасибо @JammyDodger за уточнение.Есть ли кто-то ещё, кого я могу упомянуть или к кому можно обратиться, чтобы получить ответ?

1 лайк

Результаты этого запроса немного отличаются от отчёта «Время до первого ответа»:
Например, 8 ноября:
Запрос: 93 часа
Отчёт: 116 часов
Может кто-то подсказать?

1 лайк

Я думаю, что на исследование некоторых из этих вопросов может уйти время. Я сам пытаюсь разобраться, чтобы понять, что происходит (хотя разрыв между моими навыками работы с SQL и Ruby довольно велик :slight_smile:).

Но продолжайте присылать результаты — было бы здорово окончательно прояснить всю эту информацию. :+1:

2 лайка

Что касается отчёта по постам, я думаю, что стандартный отчёт также учитывает посты тем, а также посты от системных пользователей, но при этом фильтрует только те, у которых post_type равен 1 (то есть не whisper-сообщения, небольшие сообщения действий или действия модераторов).

Я думаю, что SQL-запрос должен выглядеть примерно так:

--[params]
-- date :start_date
-- date :end_date

SELECT 
    p.created_at::date AS "Day",
    COUNT(p.id) AS "Count"
FROM posts p
INNER JOIN topics t ON t.id = p.topic_id AND t.deleted_at ISNULL
WHERE p.created_at::date BETWEEN :start_date AND :end_date
    AND p.deleted_at ISNULL
    AND t.archetype = 'regular'
    AND p.post_type = 1
GROUP BY p.created_at::date
ORDER BY 1

Не могли бы вы запустить его на вашем сайте и проверить, совпадают ли результаты?

2 лайка

Спасибо, Джамми, проверю!
Сейчас я работаю над анализом времени до первого ответа, поэтому буду признателен, если вы тоже сможете взглянуть на это.

1 лайк

Посмотрев на версию SQL, я думаю, что в ней отсутствует условие AND p.user_id <> t.user_id для исключения ответов от автора оригинального поста (OP). Если я добавлю это условие, то получу точное время между публикацией OP и первым ответом от другого пользователя:

--[params]
-- date :date_start
-- date :date_end

WITH first_reply AS (
    SELECT 
        p.topic_id, 
        MIN(post_number) post_number, 
        t.created_at
    FROM posts p
    INNER JOIN topics t ON (p.topic_id = t.id)
    WHERE p.deleted_at IS NULL
        AND p.user_id <> t.user_id
        AND p.post_number != 1
        AND p.post_type = 1
        AND p.user_id > 0
        AND t.user_id > 0
        AND t.deleted_at IS NULL
        AND t.archetype = 'regular'
        AND t.created_at::date BETWEEN :date_start AND :date_end
    GROUP BY p.topic_id, t.created_at
    ORDER BY 2 DESC
)

SELECT 
    p.topic_id, 
    fr.created_at::date dt_topic_created,
    (p.created_at - fr.created_at) response_time
FROM posts p
INNER JOIN first_reply fr 
    ON fr.topic_id = p.topic_id 
    AND fr.post_number = p.post_number
    AND p.created_at > fr.created_at
ORDER BY response_time

Также я считаю, что стандартный отчёт выводит данные в десятичном формате, а не в часах и минутах, как в SQL. Я попробую ещё раз привести их к единому виду. :+1:


Небольшое обновление: добавил AVG, чтобы результат был более похож на вывод стандартного отчёта:

--[params]
-- date :date_start
-- date :date_end

WITH first_reply AS (
    SELECT 
        p.topic_id, 
        MIN(post_number) post_number, 
        t.created_at
    FROM posts p
    INNER JOIN topics t ON p.topic_id = t.id
    WHERE p.deleted_at IS NULL
        AND p.user_id <> t.user_id
        AND p.post_type = 1
        AND p.user_id > 0
        AND t.user_id > 0
        AND t.deleted_at IS NULL
        AND t.archetype = 'regular'
        AND t.created_at::date BETWEEN :date_start AND :date_end
    GROUP BY p.topic_id, t.created_at
)

SELECT 
    fr.created_at::date dt_topic_created,
    AVG(p.created_at - fr.created_at) response_time
FROM posts p
INNER JOIN first_reply fr 
    ON fr.topic_id = p.topic_id 
    AND fr.post_number = p.post_number
    AND p.created_at > fr.created_at
GROUP BY fr.created_at::date
ORDER BY response_time

Это, кажется, совпадает со стандартным отчётом, если учитывать, что один формат — десятичный, а другой — ЧЧ:ММ. Я уверен, что есть способ преобразовать response_time из SQL в десятичный формат, но ЧЧ:ММ кажется более интуитивным вариантом. (Кажется, там также есть некоторые дополнительные критерии, которые могут быть не нужны, но также могут служить защитой от нестандартных ситуаций, поэтому я пока оставил их без изменений, пока не смогу точно сказать, нужны они или нет :slight_smile:)

Не могли бы вы запустить этот запрос и посмотреть, насколько хорошо результаты совпадают?

4 лайка

Да, теперь сумма совпадает с цифрами в отчёте по запасам, спасибо!
Только один комментарий —
Я обнаружил, что функция AVG ниже возвращает отсутствующие результаты, если время превышает 24 часа (похоже, отсутствует раздел с количеством дней).

AVG(p.created_at - fr.created_at)::time response_time

1 лайк

Ах да, приведение к time было неудачным решением. :slight_smile: Если убрать ::time, всё вернётся к более точной (хотя и менее приятной для глаз) версии.

Я также отредактирую то, что выше. :+1:

2 лайка