gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 04:28:32 24 4
gpt4 key购买 nike

我有一个包含很多列的表(相当大的一个),其中两个是“post”和“user”。对于给定的“帖子”,我想知道哪个“用户”发帖最多。

我首先考虑获取所有条目 WHERE (post='wanted_post') 然后抛出一个 PHP hack 来找到我得到最多的“用户”值,但是考虑到我的表很大,而且我的穷人了解 MySQL 微妙的调用,我正在寻找一种纯 MySQL 方法来获取此值(基本上是在给定“帖子”上发布最多的“用户”id)。

这可能吗?还是我应该求助于混合 SQL-PHP 解决方案?

谢谢,堆栈

最佳答案

听起来这就是您想要的……我是不是漏掉了什么?

SELECT user
FROM myTable
WHERE post='wanted_post'
GROUP BY user
ORDER BY COUNT(*) DESC
LIMIT 1;

编辑: 这个查询的作用的解释:

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

  1. GROUP BY user -- 这会折叠 user 列中具有相同值的行。如果这是查询中的最后一行,我们可能期望输出如下所示:

    +-------+
    | user |
    +-------+
    | bob |
    | alice |
    | joe |
  2. ORDER BY COUNT(*) DESC -- COUNT(*) 是一个聚合函数,与前面的 GROUP BY 子句。它统计每个用户的 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 列表中):

    +-------+-------+
    | user | count |
    +-------+-------+
    | joe | 8 |
    | bob | 3 |
    | alice | 1 |
  3. LIMIT 1 -- 这可能是最容易理解的,因为它只是限制返回的行数。由于我们正在对列表进行排序,从发帖数最多到发帖数最少,而且我们只想要排名靠前的发帖人,所以我们只需要第一个结果。如果您想要前 3 名发帖者,您可以改为使用 LIMIT 3

关于mysql - 表中给定值的最大出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6639901/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com