【问题标题】:SQLite How to find the most common occurrences of a valueSQLite 如何查找最常见的值
【发布时间】:2014-01-27 09:35:21
【问题描述】:

假设我有一个带有属性 X 的表 A 如何找到出现次数最多的 X? (可能有多个相同的最高出现率)

即 表A

 X
--
'a'
'b'
'c'
'c'
'b'

我想回来

X
--
'b'
'c'

我在Sqlite中不能使用关键字ALL,所以我很茫然。

我想获取每个 X 的计数,然后对其进行排序,然后以某种方式使用 ORDER BY DESC 以使最大的位于顶部,然后 LIMIT 通过比较来检查第一个元组以下的值是否相等(这意味着它们同样常见)但我不确定 LIMIT 语法以及是否可以有这样的条件

请给出提示而不是答案,是否有任何资源可以参考,以便我找出方法?

【问题讨论】:

  • 在 oracle 中我会使用 count() 和 Partition_by()
  • @Arnab SQLite 缺少视图函数。

标签: sql sqlite


【解决方案1】:

查询喜欢

SELECT x,COUNT(x) AS cnt FROM a
GROUP BY x
ORDER BY cnt DESC;

并在cnt 更改时停止处理结果行。

【讨论】:

    【解决方案2】:

    这会处理出现次数最多的多个值

    SELECT X FROM yourTable
    GROUP BY X
    HAVING COUNT(*) = (
                       SELECT MAX(Cnt) 
                       FROM(
                             SELECT COUNT(*) as Cnt
                             FROM yourTable
                             GROUP BY X
                            ) tmp
                        )
    

    SQL FIDDLE

    【讨论】:

    • 我怎样才能从中得到计数值,即 2?
    【解决方案3】:

    如果您事先不知道有多少条目可能共享相同的计数,则不能使用 LIMIT 子句。

    只需按照问题中的描述请求数据,但一次执行一行,并在返回的计数与前一行不同时停止。

    【讨论】:

      【解决方案4】:
      select X, count(X) from table group by X;
      

      【讨论】:

      • 这会给我每个 X 的计数,对,但不是最常见的那些
      猜你喜欢
      • 1970-01-01
      • 2015-06-20
      • 2014-08-08
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 2013-09-05
      • 2013-06-26
      相关资源
      最近更新 更多