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
我正在尝试对自某个日期以来参加过 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