Mysql 表中给定值的最大出现次数

Mysql 表中给定值的最大出现次数,mysql,Mysql,我有一个很大的表,有很多列,其中两个是post和user。 对于给定的帖子,我想知道哪个用户发布的最多 我首先考虑在post='wanted_post'中获取所有条目,然后抛出一个PHP hack来查找我获得最多的用户值,但是考虑到我的表很大,并且我对MySQL微妙调用的了解很差,我正在寻找一种纯MySQL方法来获取该值——基本上是在给定帖子上发布最多的用户id 可能吗?还是应该采用SQL-PHP混合解决方案 谢谢, Cystack听起来这就是你想要的。。。我错过什么了吗 SELECT user

我有一个很大的表,有很多列,其中两个是post和user。 对于给定的帖子,我想知道哪个用户发布的最多

我首先考虑在post='wanted_post'中获取所有条目,然后抛出一个PHP hack来查找我获得最多的用户值,但是考虑到我的表很大,并且我对MySQL微妙调用的了解很差,我正在寻找一种纯MySQL方法来获取该值——基本上是在给定帖子上发布最多的用户id

可能吗?还是应该采用SQL-PHP混合解决方案

谢谢,
Cystack

听起来这就是你想要的。。。我错过什么了吗

SELECT user
FROM myTable
WHERE post='wanted_post'
GROUP BY user
ORDER BY COUNT(*) DESC
LIMIT 1;
编辑:解释此查询的作用:

希望前三行对任何熟悉SQL的人都有意义。这是最后三行做有趣的事情

按用户分组-这将折叠用户列中具有相同值的行。如果这是查询中的最后一行,我们可能会看到如下输出:

+-------+
| user  |
+-------+
| bob   |
| alice |
| joe   |
ORDER BY COUNT*DESC-COUNT*是一个聚合函数,与前面的GROUP BY子句一起工作。它统计分组依据为每个用户折叠的所有行。稍微修改一下语句可能更容易理解它在做什么,以及它的潜在输出:

SELECT user,COUNT(*)
FROM myTable
WHERE post='wanted_post'
GROUP BY user;

+-------+-------+
| user  | count |
+-------+-------+
| bob   |     3 |
| alice |     1 |
| joe   |     8 |
这是显示每个用户的帖子数

但是,严格来说,不需要实际输出聚合函数的值。在这种情况下,我们可以使用它进行排序,而不需要实际输出数据。当然,如果你想知道你的顶级海报贴了多少篇文章,也许你也想把它包括在你的输出中

DESC关键字告诉数据库按降序排序,而不是默认的升序

当然,如果我们将COUNT*保留在SELECT列表中,则排序后的输出将如下所示:

限制1-这可能是最容易理解的,因为它只限制返回的行数。因为我们将列表从最多的帖子排序到最少的帖子,并且我们只想要最上面的海报,所以我们只需要第一个结果。如果你想要排名前三的海报,你可以改为使用限制3


听起来这就是你想要的。。。我错过什么了吗

SELECT user
FROM myTable
WHERE post='wanted_post'
GROUP BY user
ORDER BY COUNT(*) DESC
LIMIT 1;
编辑:解释此查询的作用:

希望前三行对任何熟悉SQL的人都有意义。这是最后三行做有趣的事情

按用户分组-这将折叠用户列中具有相同值的行。如果这是查询中的最后一行,我们可能会看到如下输出:

+-------+
| user  |
+-------+
| bob   |
| alice |
| joe   |
ORDER BY COUNT*DESC-COUNT*是一个聚合函数,与前面的GROUP BY子句一起工作。它统计分组依据为每个用户折叠的所有行。稍微修改一下语句可能更容易理解它在做什么,以及它的潜在输出:

SELECT user,COUNT(*)
FROM myTable
WHERE post='wanted_post'
GROUP BY user;

+-------+-------+
| user  | count |
+-------+-------+
| bob   |     3 |
| alice |     1 |
| joe   |     8 |
这是显示每个用户的帖子数

但是,严格来说,不需要实际输出聚合函数的值。在这种情况下,我们可以使用它进行排序,而不需要实际输出数据。当然,如果你想知道你的顶级海报贴了多少篇文章,也许你也想把它包括在你的输出中

DESC关键字告诉数据库按降序排序,而不是默认的升序

当然,如果我们将COUNT*保留在SELECT列表中,则排序后的输出将如下所示:

限制1-这可能是最容易理解的,因为它只限制返回的行数。因为我们将列表从最多的帖子排序到最少的帖子,并且我们只想要最上面的海报,所以我们只需要第一个结果。如果你想要排名前三的海报,你可以改为使用限制3


看起来是的。显然MySQL比我想象的要强大得多。再次感谢Wow,我不经常听到人们称MySQL强大:天哪,这让MySQL像级联样式表一样强大!令人惊叹的英雄联盟天哪,这让MySQL像级联样式表一样强大——我能保留这句话吗@Cystack:关系数据库比样式表强大得多。看起来确实如此。显然MySQL比我想象的要强大得多。再次感谢Wow,我不经常听到人们称MySQL强大:天哪,这让MySQL像级联样式表一样强大!令人惊叹的英雄联盟天哪,这让MySQL像级联样式表一样强大——我能保留这句话吗@Cystack:关系数据库比样式表强大得多。