现在有BLOG_ART(博客文章表 )表中有 ART_ID, BLOG_ID, SUBJECT, CONTENT, CREATE_DATE
                  1     1        subject  content    2009/10/11
                  2     2        subject2  content2   2009/12/12BLOG_ID为博客的ID,对应多个ART_ID
现在想按博主的发贴数量排序, 如果有相同的发贴数量的博客, 则需要按CREATE_DATE排序

解决方案 »

  1.   

    SELECT *
      FROM (SELECT t.*, COUNT(*) over(PARTITION BY blog_id) cnt FROM blog_art t)
     ORDER BY cnt, create_date;
      

  2.   

    select blog_id,count(*) c1,min(create_date) c2 from blog_art group by blog_id order by c1,c2
      

  3.   

    PARTITION 和group by有什么区别呢
      

  4.   

    group by 是语句中的分组,对非分组列要求使用聚合函数,如count、max、min、sum等
    PARTITION 是分析函数中的分组,对其它列没有要求
    分析函数的功能强大,可以去找点这方面的资料看看
    http://hi.baidu.com/zenghero/blog/item/b80ceab34003d5aed9335aea.html
      

  5.   


    --创建测试用表
    create table blog
    (
      ART_ID  number,
      BLOG_ID number,
      SUBJECT varchar2(50),
      CONTENT varchar2(1000),
      CREATE_DATE date
    );--插入测试数据
    insert into blog values(1,1,'subject1','content1',to_date('2009/09/12','yyyy/mm/dd'));
    insert into blog values(2,2,'subject2','content2',to_date('2009/09/13','yyyy/mm/dd'));
    insert into blog values(2,2,'subject3','content3',to_date('2009/11/25','yyyy/mm/dd'));
    insert into blog values(3,3,'subject4','content4',to_date('2009/06/28','yyyy/mm/dd'));
    insert into blog values(4,2,'subject5','content5',to_date('2009/05/11','yyyy/mm/dd'));
    insert into blog values(5,4,'subject6','content6',to_date('2009/04/20','yyyy/mm/dd'));
    insert into blog values(6,4,'subject7','content7',to_date('2010/12/02','yyyy/mm/dd'));--执行查询
    select count(1) over(partition by BLOG_ID) as "icount",
           blog.*
      from blog
     order by 1 desc,6 asc
      

  6.   

    select blog_id,count(*) c1,min(create_date) c2 from blog_art group by blog_id order by c1,c2正确