从关系中选择最常见的值 - SQL语句

时间:2010-04-05 23:39:14

标签: sql mysql greatest-n-per-group

我的数据库中有一个包含许多记录的表,某些记录对其中一列共享相同的值。 e.g。

|  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 个答案:

答案 0 :(得分:22)

select top 1 software 
from your_table 
group by software
order by count(*) desc 

答案 1 :(得分:4)

这取决于您是否要使用标准SQL或特定于供应商的扩展(另一张海报的“前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
  )
)

注意:如果多个软件在最多次出现时并列,则可能会返回多行。

答案 2 :(得分:0)

你可以通过多种方式实现,但最简单的方法就是这个

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