SQL - Как отсортировать счетчик (user_id) счетчик? - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь найти группы пользователей, которые присоединились к событиям X много раз с даты.И вывести результаты сразу с SQL, с ними ORDER (ed) BY количество событий, к которым они присоединились.

В настоящее время у меня есть ниже, и с этим я могу получить user_id (s) которые появились один раз (или два раза и т. д. в зависимости от значения HAVING).Я хотел бы работать так, чтобы я мог отображать его в столбцах, причем столбец 1 заполняется count = 1, столбец 2 - count = 2 и т. Д.

SELECT user_id
FROM api_participation
WHERE event_id IN (SELECT id
                   FROM api_events
                   WHERE type IS NOT NULL)
AND user_id IN (SELECT id
                FROM auth_user
                WHERE date_joined >= '2018-05-01 00:00:01' AND current_city_id = 8
                )
GROUP BY user_id
HAVING count(user_id) = 1

Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

0 голосов
/ 02 октября 2018

Это то, что вы хотите?

SELECT cnt, COUNT(*) 
FROM (SELECT user_id, COUNT(*) as cnt
      FROM api_participation
      WHERE event_id IN (SELECT id
                         FROM api_events
                         WHERE type IS NOT NULL)
      AND user_id IN (SELECT id
                      FROM auth_user
                      WHERE date_joined >= '2018-05-01 00:00:01' AND current_city_id = 8
                      )
      GROUP BY user_id
     ) u
GROUP BY cnt
ORDER BY cnt;
0 голосов
/ 02 октября 2018

если вы просто хотите использовать col1 и col2, вы можете справиться с этим следующим образом:

select a.user_id as col1,b.user_id as col2 from
(SELECT user_id
FROM api_participation
WHERE event_id IN (SELECT id
                   FROM api_events
                   WHERE type IS NOT NULL)
AND user_id IN (SELECT id
                FROM auth_user
                WHERE date_joined >= '2018-05-01 00:00:01' AND current_city_id = 8
                )
GROUP BY user_id
HAVING count(user_id) = 1) a
full join (SELECT user_id
FROM api_participation
WHERE event_id IN (SELECT id
                   FROM api_events
                   WHERE type IS NOT NULL)
AND user_id IN (SELECT id
                FROM auth_user
                WHERE date_joined >= '2018-05-01 00:00:01' AND current_city_id = 8
                )
GROUP BY user_id
HAVING count(user_id) = 2)b on b.user_id=a.user_id
0 голосов
/ 02 октября 2018

Может использоваться следующее:

SELECT user_id, count(user_id) as "count"

.......

ORDER BY "count";
...