11

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

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

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

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

这可能吗?

感谢您的时间。

4

3 回答 3

22
select top 1 software 
from your_table 
group by software
order by count(*) desc 
于 2010-04-05T23:44:23.883 回答
4

这取决于您是要使用标准 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
  )
)

注意:如果多个软件的出现次数最多,这可能会返回多行。

于 2010-04-05T23:49:24.570 回答
0

您可以通过多种方式做到这一点,但最简单的方法是

SELECT item  
FROM (SELECT item FROM your_table GROUP BY item ORDER BY COUNT(*) desc)  
WHERE ROWNUM<=1;
于 2012-09-11T18:41:46.160 回答