4

我正在归档这个网络论坛,它通常每周会被清除一次。所以我在屏幕上抓取它,并将它存储到我的数据库(PostgreSQL)中。

我还对数据进行了一些分析,提供了一些供用户欣赏的图表,例如一天中什么时间论坛最活跃等等。

所以我有一个帖子表,如下所示:

   Column   |            Type
------------+------------------------------
 id         | integer
 body       | text
 created_at | timestamp without time zone
 topic_id   | integer
 user_name  | text
 user_id    | integer

我现在想为我的前 10 名小海报表中的每个用户计算帖子数。

我想出了这个:

SELECT user_id, user_name, count(*)
FROM posts
GROUP BY user_id, user_name
ORDER BY count DESC LIMIT 10

事实证明这很慢。9 秒,此时帖子表中只有大约 300 000 行。

如果我只在一个列上分组,它只需要半秒钟,但我需要两者。

我对关系数据库和 SQL 比较陌生,所以我不太确定这是否正确,或者我做错了什么?

4

2 回答 2

11

可能只有一个具有特定 ID 的用户,所以max(user_name)应该 equal user_name。然后,您可以在单个列上进行分组,您的帖子表明该列工作得更快:

SELECT user_id, max(user_name), count(*)
FROM posts
GROUP BY user_id
于 2010-02-20T17:22:51.253 回答
0

也可以使用 count > 0 所以你只返回 true

于 2010-02-20T17:59:55.460 回答