现在我的数据库有域名(domainName) sina.com   imper.com   www.net  ps.com   a.tw  m.de  g.ln   。  sql = " select domainname from table "       TLD: com  | tw | ln | tw .....    业务要求: 求出TLD出现的次数  次数最多的为第一名   一次求出第二 ,三  十名             结果是: 该tld + 次数  例如:com 100次。  cn 97次  。。

解决方案 »

  1.   

    count()  我也想过了,  你不最多有多少个不同的tld。   所以没法子。
      

  2.   

       用count  还要用到排序order by(order by 里面分降序和升序)  
      

  3.   

    不同的数据库取tld可能不太一样,意思就是取出tld 并按tld分组求和。
    select distinct substr(domainname,locate(',',domainname)+1) tld ,count(*) over(partition by substr(domainname,locate(',',domainname)+1))  from table;
      

  4.   

    上面的是db2的。substr(domainname,locate('.',domainname)+1) 这里应该是.写错了。select distinct substr(domainname,locate('.',domainname)+1) tld ,
     count(*) over(partition by substr(domainname,locate('.',domainname)+1)) count
     from table;
    或者是简单点:
    select distinct tld,count(*) count 
    from
    (
    select distinct substr(domainname,locate('.',domainname)+1) tld from table
    ) a
    group by a.tld;主要是看数据,取到tld即可。
      

  5.   

    oracle下的: with t1 as
     (
          select 'g.cn' domainname from dual
          union all
           select 'a.cn' domainname from dual
           union all
           select 'a.com' domainname from dual
           union all
           select 'a.net' domainname from dual
           union all
           select 'a.org' domainname from dual
           union all
           select 'b.com' domainname from dual
           union all
           select 'x.cn' domainname from dual
     )
     select tld , sl ,   row_number() over(order by sl  desc ) pm from
     ( 
     select  distinct substr(domainname,instr(domainname,'.')+1) tld ,
               count(*) over(partition by substr(domainname,instr(domainname,'.')+1)) sl        
               from t1
      ) a;
    结果:
        TLD SL PM
    1 cn 3 1
    2 com 2 2
    3 net 1 3
    4 org 1 4