Sql 如何获取列中最频繁的值?

Sql 如何获取列中最频繁的值?,sql,oracle10g,Sql,Oracle10g,我有一个列为“Price”的表,需要获取最频繁的值。最简单的方法是什么?我的算法如下: 第一步:将不同的选择作为一个集合 第二步:foreach item in distinct collection将在原始集合中找到的项计数为diffcollection 第三步:从diffcollection中选择max 一种选择是 SELECT price FROM (SELECT price, rank() over (order by cnt desc) rnk FROM (SE

我有一个列为“Price”的表,需要获取最频繁的值。最简单的方法是什么?

我的算法如下:

  • 第一步:将不同的选择作为一个集合
  • 第二步:foreach item in distinct collection将在原始集合中找到的项计数为diffcollection
  • 第三步:从diffcollection中选择max

  • 一种选择是

    SELECT price
      FROM (SELECT price, rank() over (order by cnt desc) rnk
              FROM (SELECT price, count(*) cnt
                      FROM your_table
                     GROUP BY price))
     WHERE rnk = 1
    

    如果有两个(或更多)价格出现的频率相同,则此查询将返回这两个价格。如果你想保证一行,你需要告诉我们你想如何处理关系。

    这可以通过一条SQL语句来实现……但是,算法有什么不同吗?没有,但效率较低。