题目:
很简单,有一个订单表,两个字段,orderid和userid,订单id和用户id,清查出用户下的订单数大于3条记录的用户。
比如:orderid,userid
         1       1
         2       1
         3       1
         4       1
         1       2
         2       2
         1       3 
         2       3
         3       3
         4       3
         5       3此时查出的数据应为userid
  1
  3惭愧,没有写出来,请朋友们帮写一下,谢谢了 
     

解决方案 »

  1.   


    select userid
    from 订单表
    group by userid
    having count(1)>3;
      

  2.   

    select userid from order_t a where (select orderid(*) from order_t b where a.userid=b.userid group by userid)>3; 
      

  3.   

    那你总要写查的信息是什么吧,就你写的那个结果肯定可以查出
    userid
      1
      3还有名字相同的信息,userid应不是名字,而你的名字指的什么,用户表中的名称,通过userid来关联?
      

  4.   

    select userid from temp group by userid having count(userid) > 3
      

  5.   

    我简单地在mysql里录了些数据,难道mysql和oracle这种用法有不同的地方 
    orderid userid
       1       1
       2       1
       3       1
       1       2
       2       2
       1       3
       2       3
       3       3
      

  6.   

    面试题只是说用sql实现,没有指定是什么数据库,按常理来讲,这个语法应该是通用的吧 
      

  7.   

    你就录了这几条,肯定没有了
    orderid userid
      1 1
      2 1
      3 1
      1 2
      2 2
      1 3
      2 3
      3 3
    一条大于3的记录都没有把你的记录全录进去试下
      1 1
      2 1
      3 1
      4 1
      1 2
      2 2
      1 3  
      2 3
      3 3
      4 3
      5 3
      

  8.   

    group  by  having count(*) >= 3
      

  9.   

    朋友,非常不好意思,我疏忽了,再试了一下,可以查出了,非常感谢,要的就是这个结果。
    另外count(1)是把所有的字段都进行统计么,我使用的count(userid),这样比较容易理解一些
      

  10.   

    count(1),可以像你说的这么理解,一般理解为取所有可以取出行的记录其实你count(0)也一样的,只要不用表的字段或null都不会影响的count(null)是0count(表的字段),则取出的是在可取出记录中此字段不为null的行数
    count(*)当然是对的,和count(1)效果一样,不过应是count(1)快吧
    这些可自行试下,不清楚再问吧
      

  11.   

    ---
    count(*) 和count(1)一样快的 
      

  12.   

    简单的问题何必搞这么复杂这个问题用不到自连接,子查询,联合查询,递归查询给你写个子查询的例子,应该没错,没试,呵呵,LZ自行验证吧select userid
    from (select userid,row_number() over (partition by userid order by userid) rn
    from 订单表) t
    where rn=4;
      

  13.   

    我用mysql做的测试,所以这个肯定用不了,不过还是感谢你。