select * from tbname where c=(
select c from 
(select c,count(1) cnum from tbname where c<>0
group by c order by count(1)) t where rownum<2)
order by b desc;

解决方案 »

  1.   

    --看看下面符合你的要求吗?不知我的理解有没有错误select a.* from t a
    where a.c <> 0
    order by 
    (select count(*) from t where c = a.c) desc,a.c,b desc
      

  2.   

    不行啊!!!可能我没有表达清楚啊!
    我的意思是这样啊!
    select * from where A =(C字段除0以外重复次数最多的值按照B的倒序依次排列)谢谢大家阿
      

  3.   

    应该是类似下面的写法:
    select tname.a,tname.b,tname.c
    from tname ,  
    (select max(count),c
    from 
    (select tname.c,count(*) as count from tname group by c ) t1
    ) t2 
    where tname.c = t2.c
    order by tname.b desc;
      

  4.   

    不行啊!!!可能我没有表达清楚啊!
    我的意思是这样啊!
    select * from where A =(C字段除0以外重复次数最多的值按照B的倒序依次排列)
    并且还需要把那些c字段重复的纪录显示出来既先一条以a=c重复最多的值为条件的纪录!然后后面是这c=这个值的b的倒序的所有纪录
    然后既在一条以a=c重复次多的值为条件的纪录!然后后面是这c=这个值的b的倒序的所有纪录








    然后再把等于c=0并且没有c等于这条纪录的a的值的纪录按照倒序排列阿可能说得有些乱啊!
    实际上这个应用在一个论坛啊!需要把论坛回复最多的贴子和回复按照顺序列出来

    回复最多的贴子
    回复



    回复次多的贴子
    回复
    回复
    回复



    回复次第三多的贴子

    一次这样列出来表的逻辑是
    a是pk
    字段a是贴子的编号~~字段c 是0就说明这是一个父贴
    如果有那个c等于某个a就说明这个贴子是a的子贴谢谢大家阿55
    还没有解决阿
      

  5.   

    select (select count(1) from table b where a.C=b.C),a.*
    from table a
    order by (select count(1) from table b where a.C=b.C) desc,a.C
      

  6.   

    还是不行啊!!5555不行啊!!!可能我没有表达清楚啊!
    我的意思是这样啊!
    select * from where A =(C字段除0以外重复次数最多的值按照B的倒序依次排列)
    并且还需要把那些c字段重复的纪录显示出来既先一条以a=c重复最多的值为条件的纪录!然后后面是这c=这个值的b的倒序的所有纪录
    然后既在一条以a=c重复次多的值为条件的纪录!然后后面是这c=这个值的b的倒序的所有纪录








    然后再把等于c=0并且没有c等于这条纪录的a的值的纪录按照倒序排列阿可能说得有些乱啊!
    实际上这个应用在一个论坛啊!需要把论坛回复最多的贴子和回复按照顺序列出来

    回复最多的贴子
    回复



    回复次多的贴子
    回复
    回复
    回复



    回复次第三多的贴子

    一次这样列出来表的逻辑是
    a是pk
    字段a是贴子的编号~~字段c 是0就说明这是一个父贴
    如果有那个c等于某个a就说明这个贴子是a的子贴谢谢大家阿55
    还没有解决阿
      

  7.   

    还是不行啊!!5555不行啊!!!可能我没有表达清楚啊!
    我的意思是这样啊!
    select * from where A =(C字段除0以外重复次数最多的值按照B的倒序依次排列)
    并且还需要把那些c字段重复的纪录显示出来既先一条以a=c重复最多的值为条件的纪录!然后后面是这c=这个值的b的倒序的所有纪录
    然后既在一条以a=c重复次多的值为条件的纪录!然后后面是这c=这个值的b的倒序的所有纪录








    然后再把等于c=0并且没有c等于这条纪录的a的值的纪录按照倒序排列阿可能说得有些乱啊!
    实际上这个应用在一个论坛啊!需要把论坛回复最多的贴子和回复按照顺序列出来

    回复最多的贴子
    回复



    回复次多的贴子
    回复
    回复
    回复



    回复次第三多的贴子

    一次这样列出来表的逻辑是
    a是pk
    字段a是贴子的编号~~字段c 是0就说明这是一个父贴
    如果有那个c等于某个a就说明这个贴子是a的子贴谢谢大家阿55
    还没有解决阿
      

  8.   

    还是不行啊!!5555不行啊!!!可能我没有表达清楚啊!
    我的意思是这样啊!
    select * from where A =(C字段除0以外重复次数最多的值按照B的倒序依次排列)
    并且还需要把那些c字段重复的纪录显示出来既先一条以a=c重复最多的值为条件的纪录!然后后面是这c=这个值的b的倒序的所有纪录
    然后既在一条以a=c重复次多的值为条件的纪录!然后后面是这c=这个值的b的倒序的所有纪录








    然后再把等于c=0并且没有c等于这条纪录的a的值的纪录按照倒序排列阿可能说得有些乱啊!
    实际上这个应用在一个论坛啊!需要把论坛回复最多的贴子和回复按照顺序列出来

    回复最多的贴子
    回复



    回复次多的贴子
    回复
    回复
    回复



    回复次第三多的贴子

    一次这样列出来表的逻辑是
    a是pk
    字段a是贴子的编号~~字段c 是0就说明这是一个父贴
    如果有那个c等于某个a就说明这个贴子是a的子贴谢谢大家阿55
    还没有解决阿
      

  9.   

    select (select count(1) from table b where a.C=b.C),a.*
    from table a
    order by (select count(1) from table b where a.C=b.C) desc,a.b desc如果有问题,请把问题说出来
      

  10.   

    select   a.*
        from a x, (select   a, c, count (*) cnt
                       from a
                      where c != 0
                   group by a, c) y
       where x.a = y.a and x.c = y.c
    order by y.cnt desc, b desc;
      

  11.   

    对不起,刚才的是错的。请参照下面的测试:SQL> select * from test;
             A B                   C
    ---------- ---------- ----------
             1 x                   2
             2 x                   2
             3 x                   0
             4 x                   0
             5 x                   9
             6 x                   1
             7 x                   1
             8 x                   3
             9 x                   2
             0 x                   1
    10 rows selected.SQL> select   x.*, y.cnt
      2      from test x, (select   c, count (*) cnt
      3                        from test
      4                       where c != 0
      5                    group by c) y
      6     where x.c = y.c
      7  order by y.cnt desc, b desc;         A B                   C        CNT
    ---------- ---------- ---------- ----------
             6 x                   1          3
             0 x                   1          3
             7 x                   1          3
             1 x                   2          3
             9 x                   2          3
             2 x                   2          3
             8 x                   3          1
             5 x                   9          18 rows selected.
      

  12.   

    谢谢你啊
    KingSunSha(弱水三千) 还有一个问题啊!你上面这个sql能修改成下面这个嘛?就是y.cnt
    去掉y
    order的时候也去掉y啊!
    不去掉的话程序里执行不了啊!因为里面还欠了一张表select   x.*, cnt
            from bbslist x, (select   replyto, count (*) cnt
                            from bbslist
                           where replyto != 0 and bbscode ='1'
                         group by replyto) y
          where x.replyto = y.replyto
        order by cnt desc, posttime desc;
      

  13.   

    select   x.*
        from bbslist x, (select   replyto, count (*) cnt
                             from bbslist
                            where replyto != 0 and bbscode = '1'
                         group by replyto) y
       where x.replyto = y.replyto
    order by cnt desc, posttime desc;
      

  14.   

    这样写不行吗?
    select   x.*, cnt
            from bbslist x, (select   replyto, count (*) cnt
                            from bbslist
                           where replyto != 0 and bbscode ='1'
                         group by replyto) y
          where x.replyto = y.replyto
        order by cnt desc, posttime desc;
      

  15.   

    测试可以啊!但是高手写的sql我不敢乱修改啊!怕自己考虑的不全面!数据如果变动了就会出现问题阿
      

  16.   

    是0的纪录也要显示出来啊!
    先是0的这条纪录
    然后是数据库里面所有c等于这条0的纪录的a的数据按照b得到序排列
            select * from where A =(C字段除0以外重复次数最多的值按照B的倒序依次排列)
    并且还需要把那些c字段重复的纪录显示出来既先一条以a=c重复最多的值为条件的纪录!然后后面是这c=这个值的b的倒序的所有纪录
    然后既在一条以a=c重复次多的值为条件的纪录!然后后面是这c=这个值的b的倒序的所有纪录








    然后再把等于c=0并且没有c等于这条纪录的a的值的纪录按照倒序排列阿可能说得有些乱啊!
    实际上这个应用在一个论坛啊!需要把论坛回复最多的贴子和回复按照顺序列出来

    回复最多的贴子
    回复



    回复次多的贴子
    回复
    回复
    回复



    回复次第三多的贴子

    一次这样列出来表的逻辑是
    a是pk
    字段a是贴子的编号~~字段c 是0就说明这是一个父贴
    如果有那个c等于某个a就说明这个贴子是a的子贴谢谢大家阿55
    还没有解决阿
      

  17.   

    a(pk)(varch2)    b(date)   (varch2)
       11671 日期       0.
       11672 日期       11671 
       11673 日期       11671
       11674 日期       11671
       11675 日期       0
       11676 日期       11675
       11677 日期       11675
       11678 日期       11671希望效果11671 日期      0  (主贴)
    11672 日期      11671  (回复)
    11673 日期      11671  (回复)
    11674 日期      11671  (回复)
    11678 日期      11671  (回复)
    11675 日期      0  (主贴)
    11676 日期      11675 (回复)
    11677 日期      11675 (回复)
      

  18.   

    MM 的问题,
    怎么说也得来支持一下的。
    解决方法如下,DECLARE @ TABLE(Id int, PostTime smalldatetime, PId int)
    INSERT @ 
    SELECT 11671, getdate()-10, 0
    UNION ALL
    SELECT 11672, getdate()-10, 11671
    UNION ALL
    SELECT 11673, getdate()-9, 11671
    UNION ALL
    SELECT 11674, getdate()-8, 11671
    UNION ALL
    SELECT 11675, getdate()-5, 0
    UNION ALL
    SELECT 11676, getdate()-4, 11675
    UNION ALL
    SELECT 11677, getdate()-3, 11675
    UNION ALL
    SELECT 11678, getdate()-1, 11671
    SELECT Id GroupID, * FROM @ WHERE PId = 0
    UNION ALL
    SELECT tA.Id, tB.* FROM @ tA
    LEFT JOIN @ tB ON tA.Id = tB.PId
    WHERE tB.Id IS NOT NULL
    ORDER BY 1 ,2GroupID     Id          PostTime               PId         
    ----------- ----------- --------------------- ----------- 
    11671       11671       2004-08-22 18:23:00   0
    11671       11672       2004-08-22 18:23:00   11671
    11671       11673       2004-08-23 18:23:00   11671
    11671       11674       2004-08-24 18:23:00   11671
    11671       11678       2004-08-31 18:23:00   11671
    11675       11675       2004-08-27 18:23:00   0
    11675       11676       2004-08-28 18:23:00   11675
    11675       11677       2004-08-29 18:23:00   11675
      

  19.   

    SELECT   x.*
        FROM bbslist x,
             (SELECT   DECODE (replyto, '0', a, replyto) groupid, COUNT (*) cnt
                  FROM bbslist
                 WHERE bbscode = '1'
              GROUP BY DECODE (replyto, '0', a, replyto)) y
       WHERE DECODE (x.replyto, '0', x.a, x.replyto) = y.groupid
    ORDER BY cnt DESC, posttime DESC;
      

  20.   

    非常感谢 KingSunSha(弱水三千) 阿
    犬犬(心帆)在这里才一颗三角xixi