我的数据库中有一个包含许多记录的表,某些记录对其中一列共享相同的值。 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”,因为它比任何其他软件都要多。
这可能吗?
感谢您的时间。
答案 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;