我想做一条判断查询,不知道能不能通过一条sql实现
例如 A表有
+------+------+--------+
| id   | uid  | online |
+------+------+--------+
|    1 |    1 |     13 |
|    1 |    2 |      6 |
|    2 |    3 |     23 |
|    2 |   32 |     77 |
|    5 |    5 |     33 |
|    5 |    4 |      3 |
|    3 |   30 |     83 |
|    3 |   50 |     43 |
+------+------+--------+                                                         
条件是  判断具有相同ID 的2个 UID   如果online都大于10的话 
就技术+1 如果有一个不大于10 就不加。
根据条件求的结果是 2;
(因为id为1的两个uid的online其中一个不大于10,id为5的也一样 所以就不累加)              
==========================
说白了就是 比如一个游戏 统计流失用户个数。例如创建一个帐号,他建了2个角色。一个角色符合流失条件,但另一个角色不符合。所以他这个帐号就不能被计算在流失用户中。
如果2个角色都符合流失条件。那么就统计起来。                                 
哪位高手能帮帮忙,这个sql该怎么写                                            
                                                 
                                               
                                               
                                               
                                               
                                                 
                                                 
                                               
                                                  
                                              
                                                
                                                   
                                                     

解决方案 »

  1.   

    SELECT COUNT(*) FROM (
    SELECT a.id FROM ttp1a a INNER JOIN
    (
    SELECT id FROM (
    SELECT id,uid FROM ttp1a GROUP BY id,uid ) a1 GROUP BY id HAVING COUNT(*)>=2) a3 ON a.id=a3.id 
    GROUP BY id
    HAVING SUM(IF(online>=10,1,0))=2) a4
      

  2.   

    mysql> select count(id) from (select id from tb where online>10 group by id having count(id)=2)t;
    +-----------+
    | count(id) |
    +-----------+
    |         2 |
    +-----------+
    1 row in set (0.00 sec)
      

  3.   

    select count(*) 
    from a t1 inner join a t2 on t1.id=t2.id
    where t1.uid>t2.uid
    and t1.online>10 
    and t2.online>10 
      

  4.   

    select count(distinct id) as 个数
    from A t
    WHERE not exists(select * from A where t.id=id and online<=10)
      

  5.   

    你写的虽然有点接近。但是你的count(id) = 2 只算了1个帐号 2个角色。
    那如果1个帐号只有1个角色这种。根本都没在判断之内
      

  6.   

    所以说举例也是一种学问,经常会有人举的例子并不能代表所有想测试的情况,比如顶楼的测试数据。select count(distinct id)
    from a t
    where not exists (select 1 from a where id=a.id and online<10);