SQL - 如何对 count(user_id) 计数进行排序?

SQL - How do I sort count(user_id) the count?

我正在尝试对自某个日期以来参加过 X 次活动的用户群组进行排序。并一次输出 SQL 结果,其中 ORDER(ed) BY 他们加入的事件数。

目前我有下面的,有了这个我可以获得出现过一次(或两次等,取决于 HAVING 值)的 user_id(s)。我想以一种方式将其显示在列中,第 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

如有任何帮助,我们将不胜感激。

可以使用以下内容:

SELECT user_id, count(user_id) as "count"

.......

ORDER BY "count";

这是你想要的吗?

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;

如果你只想要 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