# Запрос Data Explorer для % тем, решённых конкретной группой пользователей

**URL:** <https://meta.discourse.org/t/data-explorer-query-for-of-topics-solved-by-specific-users-group/180880>\
**Category:** Data & reporting\
**Tags:** sql-query\
**Created:** [23.Февраль.2021 14:33:26 UTC](https://meta.discourse.org/t/data-explorer-query-for-of-topics-solved-by-specific-users-group/180880 "2021-02-23T14:33:26Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Konrad\_Sopala](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/konrad_sopala/32/167014_2.png) [@Konrad\_Sopala](https://meta.discourse.org/u/Konrad_Sopala)\
**Post date:** [23.Февраль.2021 14:33:26 UTC](https://meta.discourse.org/t/data-explorer-query-for-of-topics-solved-by-specific-users-group/180880/1 "2021-02-23T14:33:26Z")

</div>

Всем привет, кто работает с [Data Explorer](https://meta.discourse.org/t/32566?silent=true)!

(Пожалуйста, потерпите меня, @michebs 😃 — у меня осталось всего два вопроса, надеюсь, это будет полезно и другим)

Создавал ли кто-нибудь запрос в [Data Explorer](https://meta.discourse.org/t/32566?silent=true) для вычисления процента решённых тем по конкретной группе с разбивкой по месяцам и годам?

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

 ![Screenshot 2021-02-23 at 15.32.39](https://global.discourse-cdn.com/meta/original/3X/3/7/378c314c2ffb7965c137726c3a080d5ff22577e3.png)

---

<div class="post-metadata">

**Author:** ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)\
**Post date:** [03.Март.2021 00:03:54 UTC](https://meta.discourse.org/t/data-explorer-query-for-of-topics-solved-by-specific-users-group/180880/3 "2021-03-03T00:03:54Z")

</div>

Мы, безусловно, можем организовать что-то подобное, все данные существуют.

«Buy % solved»… что именно вы имеете в виду?

- Пост был создан в январе.
- Группа Awesome получила принятый ответ в феврале.
- 73 других темы получили решения в феврале от других групп и пользователей.

Так что, я полагаю, у группы Awesome процент решений за февраль составляет 1,35%?

---

<div class="post-metadata">

**Author:** ![Konrad\_Sopala](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/konrad_sopala/32/167014_2.png) [@Konrad\_Sopala](https://meta.discourse.org/u/Konrad_Sopala)\
**Post date:** [03.Март.2021 11:17:14 UTC](https://meta.discourse.org/t/data-explorer-query-for-of-topics-solved-by-specific-users-group/180880/4 "2021-03-03T11:17:14Z")

</div>

Допустим, за месяц было 100 решений. Есть двадцать человек, входящих в какую-то группу, и они начали отмечать свои ответы как решения — в общей сложности 20 из них. Мне нужен запрос, в котором я укажу их основной ID группы в скрипте и получу данные по месяцам, чтобы показать для текущего месяца 20/100 — 20%.

---

<div class="post-metadata">

**Author:** ![michebs](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/michebs/32/190102_2.png) [@michebs](https://meta.discourse.org/u/michebs)\
**Post date:** [04.Март.2021 10:30:41 UTC](https://meta.discourse.org/t/data-explorer-query-for-of-topics-solved-by-specific-users-group/180880/11 "2021-03-04T10:30:41Z")

</div>

Привет, Конрад, извини за задержку.  
Я всё ещё проверяю некоторые запросы, но воспользуюсь случаем, чтобы уточнить: это тот результат, который вы ждёте?

| год | месяц | group\_name | tt\_groups | всего | % |
| --- | --- | --- | --- | --- | --- |
| 2021 | 1 | team1 | 40 | 70 | 57 |
| 2021 | 1 | team2 | 30 | 70 | 43 |

---

<div class="post-metadata">

**Author:** ![michebs](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/michebs/32/190102_2.png) [@michebs](https://meta.discourse.org/u/michebs)\
**Post date:** [04.Март.2021 10:42:40 UTC](https://meta.discourse.org/t/data-explorer-query-for-of-topics-solved-by-specific-users-group/180880/12 "2021-03-04T10:42:40Z")

</div>

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

```sql
WITH users_groups AS (
    SELECT 
        user_id, 
        g.id,
        g.name group_name 
    FROM users u
    INNER JOIN user_actions ua ON ua.user_id = u.id
    LEFT JOIN groups g ON g.id = u.primary_group_id
    WHERE ua.action_type = 15
    GROUP BY user_id, g.id
),
    
tt_solution_by_month AS (
    SELECT 
        date_part('year', created_at) AS year, 
        date_part('month', created_at) AS month,
		COUNT(*) AS "total"
	FROM user_actions ua
	WHERE ua.action_type = 15
	GROUP BY date_part('year', created_at), date_part('month', created_at)
	ORDER BY date_part('year', created_at) ASC, date_part('month', created_at)
),
	
tt_solution_groups_by_month AS (
    SELECT 
        date_part('year', created_at) AS year, 
        date_part('month', created_at) AS month,
        ug.group_name,
    	COUNT(*) AS "tt_groups"
    FROM user_actions ua
    INNER JOIN users_groups ug ON ug.user_id = ua.user_id
    WHERE ua.action_type = 15
    GROUP BY ug.group_name, date_part('year', created_at), date_part('month', created_at)
    ORDER BY date_part('year', created_at) ASC, date_part('month', created_at), ug.group_name)
    
SELECT 
    ts.year,
    ts.month,
    COALESCE(tsg.group_name,'без группы'),
    tt_groups,
    total,
    TRUNC((tt_groups::decimal/total::decimal) *100,1) AS "%"
FROM tt_solution_groups_by_month tsg  
INNER JOIN tt_solution_by_month ts 
    ON ts.year = tsg.year AND ts.month = tsg.month 

```

Дайте знать, соответствует ли это ожидаемому результату, или нужно что-то скорректировать.

Мишель

---

<div class="post-metadata">

**Author:** ![Konrad\_Sopala](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/konrad_sopala/32/167014_2.png) [@Konrad\_Sopala](https://meta.discourse.org/u/Konrad_Sopala)\
**Post date:** [04.Март.2021 10:53:24 UTC](https://meta.discourse.org/t/data-explorer-query-for-of-topics-solved-by-specific-users-group/180880/13 "2021-03-04T10:53:24Z")

</div>

Без проблем! Вы мой спаситель! 😃

Почти идеально! Мне не нужны столбцы tt\_groups и total, только число в процентах. Что касается столбца group\_name, то запрос будет только для одной группы, поэтому и этот столбец не нужен. В коде запроса я просто укажу primary\_group\_id, чтобы он искал решения только для этой конкретной группы.

---

<div class="post-metadata">

**Author:** ![michebs](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/michebs/32/190102_2.png) [@michebs](https://meta.discourse.org/u/michebs)\
**Post date:** [04.Март.2021 11:00:37 UTC](https://meta.discourse.org/t/data-explorer-query-for-of-topics-solved-by-specific-users-group/180880/14 "2021-03-04T11:00:37Z")

</div>

Откорректировано. 🙂

```sql
-- [params]
-- string :primary_group_id

WITH users_groups AS (
    SELECT 
        user_id, 
        g.id,
        g.name group_name 
    FROM users u
    INNER JOIN user_actions ua ON ua.user_id = u.id
    LEFT JOIN groups g ON g.id = u.primary_group_id
    WHERE ua.action_type = 15
    AND u.primary_group_id = :primary_group_id
    GROUP BY user_id, g.id
),
    
tt_solution_by_month AS (
    SELECT 
        date_part('year', created_at) AS year, 
        date_part('month', created_at) AS month,
		COUNT(*) AS "total"
	FROM user_actions ua
	WHERE ua.action_type = 15
	GROUP BY date_part('year', created_at), date_part('month', created_at)
	ORDER BY date_part('year', created_at) ASC, date_part('month', created_at)
),
	
tt_solution_groups_by_month AS (
    SELECT 
        date_part('year', created_at) AS year, 
        date_part('month', created_at) AS month,
        ug.group_name,
    	COUNT(*) AS "tt_groups"
    FROM user_actions ua
    INNER JOIN users_groups ug ON ug.user_id = ua.user_id
    WHERE ua.action_type = 15
    GROUP BY ug.group_name, date_part('year', created_at), date_part('month', created_at)
    ORDER BY date_part('year', created_at) ASC, date_part('month', created_at), ug.group_name)
    
SELECT 
    ts.year,
    ts.month,
    TRUNC((tt_groups::decimal/total::decimal) *100,1) AS "%"
FROM tt_solution_groups_by_month tsg  
INNER JOIN tt_solution_by_month ts 
    ON ts.year = tsg.year AND ts.month = tsg.month

```

---

<div class="post-metadata">

**Author:** ![Konrad\_Sopala](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/konrad_sopala/32/167014_2.png) [@Konrad\_Sopala](https://meta.discourse.org/u/Konrad_Sopala)\
**Post date:** [04.Март.2021 11:20:24 UTC](https://meta.discourse.org/t/data-explorer-query-for-of-topics-solved-by-specific-users-group/180880/15 "2021-03-04T11:20:24Z")

</div>

Отлично! Это именно то, что я искал!

---

<div class="post-metadata">

**Author:** ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)\
**Post date:** [03.Апрель.2021 12:05:44 UTC](https://meta.discourse.org/t/data-explorer-query-for-of-topics-solved-by-specific-users-group/180880/20 "2021-04-03T12:05:44Z")

</div>

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.
