【问题标题】:PHP MariaDB PDO count duplicate valuesPHP MariaDB PDO 计算重复值
【发布时间】:2019-03-24 10:15:53
【问题描述】:

也许是一个愚蠢的问题,但我找不到任何东西。我知道您可以通过查询进行计数和一些基本数学运算。

有没有办法让数据库计数并返回出现次数最多或最少的结果?

假设您在数据库中拥有图书馆的所有页面,并且您想知道使用最多的前 5 个字符或最少使用的字符。

我想最简单的例子就是彩票。假设您有一张过去的彩票结果表。假设您想要返回前 10 个抽奖次数最多的数字列表。假设数字的范围从 1 到 100。

运行以下查询 100 次不同的时间然后运行一些 php 对数据进行排序不是很有效。

    SELECT COUNT(*) FROM mytable WHERE ball=1

肯定有办法返回重复次数最多的数据。

也许我想多了。无论如何,感谢您对此事的任何帮助。

【问题讨论】:

  • GROUP BY 是完成此类任务的绝佳工具。
  • “我知道你可以通过查询进行计数和一些基本的数学运算。”我建议研究一下你可以用 SQL 做更多的事情。与一些数学相比,您可以实现的目标要多得多。您在 SQL 方面的水平越高,您编写的程序就越少,并且您可以通过利用 DB 获得一些无与伦比的应用程序速度。

标签: php pdo count duplicates mariadb


【解决方案1】:

这就是所谓的分组,group by 子句可以让你这样做,确保你不只是拉出计数,还有你正在计数的东西,在这种情况下是ball

获取最少的出现次数:

SELECT ball, COUNT(*) FROM mytable GROUP BY ball ORDER BY ball ASC limit 1;

获取最高次数的出现:

SELECT ball, COUNT(*) FROM mytable GROUP BY ball ORDER BY ball DESC limit 1;

如果您希望它们全部在一个结果中,您可以使用 union/union all:

(SELECT ball, COUNT(*) FROM mytable GROUP BY ball ORDER BY ball ASC limit 1)
UNION ALL
(SELECT ball, COUNT(*) FROM mytable GROUP BY ball ORDER BY ball DESC limit 1);

【讨论】:

  • 也许会提到按实际计数排序
  • 有没有办法让数据库计数并返回出现次数最高最低的结果?
  • 抱歉,提交太早了!
  • 谢谢,太好了!您会使用UNION 来比较和处理多个列吗?假设有一个 ball1、ball2、ball3,每个都有可能存储相同的数据。
  • @Sabyre 不,每个子查询总是只返回一个结果,因此使用联合只允许您显示 2 个结果,最高出现次数和最低出现次数。如果您有 2 个项目的最高或最低出现次数相同,那么由于 LIMIT,DB 只会选择它找到的第一个。
【解决方案2】:

你可以简单地使用

SELECT column, COUNT(*) 
FROM mytable 
GROUP BY column_name

这将计算特定 column_name 的所有现有条目 你应该在COUNT(*) 之前使用列,这样你就知道什么有那么多值了。

我希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 2013-04-18
    • 2018-11-15
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 2015-06-17
    相关资源
    最近更新 更多