表 rcode
如:
ids   user   type  len
 12    a     拨入    27
 13    b     拨出    47
 14    a     拨入    53
 15    c     拨出    33
 16    a     拨入    47
 17    a     拨入    50
 18    b     拨出    22
 19    a     拨入    11
 20    c     拨出    35
 21    d     拨入    17
.........................
........................
............................依次为:编号id,用户,类型,时间长度
我要查询的是:任意的用户(可能是一个用户或多个用户一起查询)拨入和拨出的总次数和总通话时间
假设查询的结果:(查询用户a和用户b)
用户       拨入        拨出          总计    
a       5次/55秒    3次/65秒      8次/120秒
b       1次/10秒     2次/3秒       3次/13秒请求各位高手帮我想条sql语句。。我用的是MYSQL数据库。。我头都想大了。。但是就是没达到想要的结果

解决方案 »

  1.   

    SELECT `user` AS `用户`,SUM(CASE WHEN `type`='拨入' THEN `len` ELSE NULL END) AS `拨入秒数`,SUM(CASE WHEN `type`='拨出' THEN `len` ELSE NULL END) AS `拨出秒数`,SUM(CASE WHEN `type`='拨入' THEN 1 ELSE NULL END) AS `拨入次数`,SUM(CASE WHEN `type`='拨出' THEN 1 ELSE NULL END) AS `拨出次数` FROM `rcode` GROUP BY `user`
    具体的就不写了 只提供思路
      

  2.   

    select `user`
    ,sum(if(type='拨入',1,0) as 拨入次
    ,sum(if(type='拨入',len,0) as 拨入秒
    ,sum(if(type='拨出',1,0) as 拨出次
    ,sum(if(type='拨出',len,0) as 拨出秒
    ,sum(1) as 总计次
    ,sum(len) as 总计秒
    from rcode
    where `user` in ('a','b')
    group by `user`
        [align=center]====  ====
    [/align]
      

  3.   

    其他还可以用JOIN联接表,条件上用OR替代IN,你可以自己改一下。
        [align=center]====  ====
    [/align]
      

  4.   

    select user aS 用户,CONCAT(拨入次,"/" ,拨入秒) as 拨入,
    CONCAT(拨出次,"/",拨出秒) as 拨出,CONCAT(总计次,"/", 总计秒 ) AS 总计 
    FROM (
    select user
        ,sum(if(type='拨入',1,0)) as 拨入次
        ,sum(if(type='拨入',len,0)) as 拨入秒
        ,sum(if(type='拨出',1,0)) as 拨出次
        ,sum(if(type='拨出',len,0)) as 拨出秒
        ,count(*) as 总计次
        ,sum(len) as 总计秒
    from tt1
    where user in ('a','b')
    group by user)
      

  5.   

    用select语句执行效率可能比较低,可以试试存储过程。