+------------+------+-----------+---------------------+---------------------+
| m_id       | s_id | soft_name | soft_uninstall_path | time                |
+------------+------+-----------+---------------------+---------------------+
| 1234567892 |    1 | test.ext  | aaa                 | 2007-08-09 00:00:00 |
| 1234567892 |    1 | test.exe  | aabn                | 2007-08-10 00:00:00 |
| 1234567892 |    1 | test.exe  | aabn                | 2007-08-10 00:00:00 |
| 1234567893 |    1 | test.exe  | aabn                | 2007-08-10 00:00:00 |
| 1234567893 |    1 | test.exe  | aabn                | 2007-08-10 00:00:00 |
| 1234567890 |    1 | test1.exe | aabn                | 2007-08-10 00:00:00 |
| 1234567891 |    1 | test1.exe | aabn                | 2007-08-10 00:00:00 |
| 1234567893 |    1 | ttt.exe   | dasf                | 2008-02-01 00:00:00 |
| 1234567892 |    1 | dee       | eee                 | 2008-03-01 00:00:00 |
+------------+------+-----------+---------------------+---------------------+
想统计该表中soft_name在不同m_id上安装的个数的top 3,怎样写?

解决方案 »

  1.   

    select * from (select m_id ,count(*) as cnt from table where soft_name= 'test.exe(你要查询的softname)' group by sex  order by cnt desc ) where rownum < 4
      

  2.   

    select * from 
    (select t.soft_name,m_id,count(*) c from ttt
    group by t.soft_name,m_id
    order by c desc)
    where c<=3
      

  3.   

    select * from (select m_id ,count(*) as cnt from test where soft_name= 'test.exe' group by m_id  order by cnt desc ) where rownum  < 4上面的group by 写错了
      

  4.   


    SELECT SOFT_NAME,CNUM FROM (
    SELECT soft_name,COUNT(DISTINCT MID) CNUM FROM TBNAME GROUP BY SOFT_NAME 
    ORDER BY COUNT(DISTINCT MID) DESC
    ) WHERE ROWNUM<4;
      

  5.   


    SELECT M_ID, SOFT_NAME, TOTAL
    FROM (
         SELECT M_ID,SOFT_NAME, TOTAL,  
                ROW_NUMBER() OVER (PARTITION BY M_ID, SOFT_NAME ORDER BY TOTAL DESC) AS SEQ
         FROM   (
                 SELECT M_ID,SOFT_NAME, COUNT(SOFT_NAME) AS TOTAL
                 FROM   soft_name
                 GROUP  BY M_ID,SOFT_NAME
                 )
         )
      

  6.   

    大概我没说明白意思我希望输出的是
    test.exe  2
    test1.exe 2
    test.ext 1
    ttt.exe 1
    dee  1test.exe虽然出现4次,但只属于两个不同m_id,所以是2,test1.exe出现两次,又分属两个不同m_id,所以也
    是2,以此类推
    在线等,得到结果马上给分
    谢谢
      

  7.   

    select * from (select m_id ,soft_name,count(*) as cnt from test group by m_id,soft_name  order by cnt desc ) 
    where rownum   < 4 
      

  8.   

    写出来了,应该是这样
    select b.soft_name,count(*) as cnt from (select distinct m_id,soft_name from mss_software) b group by b.soft_name order by cnt desc 谢谢大家