代码之家  ›  专栏  ›  技术社区  ›  Ronnie

从relation-sql语句中选择最常见的值

  •  11
  • Ronnie  · 技术社区  · 15 年前

    我的数据库中有一个表有许多记录,其中一列的某些记录共享相同的值。例如

    |  id  |  name  |  software  |
    ______________________________
    |  1   |  john  |  photoshop |
    |  2   |  paul  |  photoshop |
    |  3   |  gary  |  textmate  |
    |  4   |  ade   |  fireworks |
    |  5   |  fred  |  textmate  |
    |  6   |  bob   |  photoshop |
    

    我想通过使用SQL语句返回最常见软件的值。

    因此在上面的示例中,所需的SQL语句将返回“photoshop”,因为它比任何其他软件都要多。

    这有可能吗?

    谢谢你抽出时间。

    3 回复  |  直到 12 年前
        1
  •  22
  •   Carl Manaster    15 年前
    select top 1 software 
    from your_table 
    group by software
    order by count(*) desc 
    
        2
  •  4
  •   cletus    15 年前

    这取决于您是否要使用标准的SQL或特定于供应商的扩展(另一个海报有一个“top n”查询,即 标准)。一个标准的解决方案是。

    SELECT software, COUNT(1) 
    FROM tablename
    GROUP BY software
    HAVING COUNT(1) = (
      SELECT MAX(sc) FROM (
        SELECT software, COUNT(1) sc
        FROM tablename
        GROUP BY software
      )
    )
    

    注: 如果多个软件绑定的次数最多,则可能返回多行。

        3
  •  0
  •   Arush Kamboj    12 年前

    你可以用很多方法来做,但最简单的方法是

    SELECT item  
    FROM (SELECT item FROM your_table GROUP BY item ORDER BY COUNT(*) desc)  
    WHERE ROWNUM<=1;