数据: 
id xid user xx 
1 1 u1 0
2 1 u1 1
3 1 u2 0
4 1 u2 1
5 2 u1 1
6 2 u1 0
7 1 u3 1
8 1 u1 0
每个user对应的同一xid有且仅有一个xx字段为1 
要求对xid进行分组统计,并查询出xx为一的记录 
结果: id xid user xx  count
2 1 u1 1 3
4 1 u2 1 2
5 2 u1 1 2
7 1 u3 1 1

解决方案 »

  1.   

    这个问题,我也想知道呀!关注就是啦!
    玩过这段没有
    Session s=null;
    List list=null;
    Criteria ct=null;

    s=HibernateSessionFactory.getSession();
    ct=s.createCriteria(StockTable.class);
    if(goodsSelfid.equals(""))
    {
    ct.add(Expression.eq("goodsSelfid","X108"));
    }else{
    ct.add(Expression.eq("goodsSelfid",goodsSelfid));
    log.warn("StockSelect method isHaveNote  goodsSelfid :="+goodsSelfid);
    }
    list=ct.list();
    s.close();
    if(list.size()==0)
    {
    log.warn("StockSelect method isHaveNote return false ");
    return false;

    }else{
    return true;
    }
    看看,这段代码,也许用Criteria 比较简单呢!我也没有用呢,但现在正着手写呢,如果有机会,下次我试过之后,或者是你先试试,如果可以话,给我也留下信,我想会比你写SQL或HQL 要好的多,根据所类代码看得出,这个Criteria 还是不错的;
      

  2.   

    warn("StockSelect method isHaveNote return false "); 
    return false; }else{ 
    return true; 

    看看,这段代码,也许用Criteria 比较简单呢!我也没有用呢,但现在正着手写呢,如果有机会,下次我试过之后,或者是你先试试,如果可以话,给我也留下信,我想会比你写SQL或HQL 要好的多,根据所类代码看得出,这个Criteria 还是不错的;
      

  3.   


    其实难点在于分组查出xx=1的记录,分组了并且要xx=1 
      

  4.   

    有些代码用Criteria 写不出来,还是得用HQL
      

  5.   

    select id=(
    select min(id) from info as two 
    where xx=1 and one.xid=two.xid and one.[user]=two.[user]
    )
    ,xid,[user],max(xx) as xx,count(*) as [count]
    from info as one
    group by xid,[user]
    having max(xx)=1
    order by id
      

  6.   

    试试Projection,这个应该能满足要求吧exList results = session.createCriteria(Cat.class)
        .setProjection( Projections.rowCount() )
        .add( Restrictions.eq("color", Color.BLACK) )
        .list();List results = session.createCriteria(Cat.class)
        .setProjection( Projections.projectionList()
            .add( Projections.rowCount() )
            .add( Projections.avg("weight") )
            .add( Projections.max("weight") )
            .add( Projections.groupProperty("color") )
        )
        .list();