在一张表存有打卡时间,怎么在一条SQL语句中实现统计迟到、不迟到的人数,请会的人指点一下,谢谢!
表结构大致如下:id,num,name,arrival_time

解决方案 »

  1.   

    select sum(case when to_char(arrival_time,'hh24miss')<'083000' then 1 else 0 end),
           sum(case when to_char(arrival_time,'hh24miss')>='083000' then 1 else 0 end)
    from table
      

  2.   

    太厉害!绝对大牛!
    现在还有一个比较棘手的问题就是需要关联两张表列出未签到、迟到、正常的信息。之前做的是根据时间判断是否是迟到、正常、未签到,sql语句是:
    select kq_user.num,kq_user.name,kq_day.day_time,kq_day.arrival_time,kq_user.deptName from kq_user left join (kq_day) on (kq_user.num=kq_day.userid  and  kq_day.day_time='20101012') where kq_user.deptno!=8 order by arrival_time asc;,上面的sql关联两张表最主要目的是显示未签到的。但现在要做的是要把这三种状态分别统计出来,肯定还是要关联表,但不知道怎么把刚才回复的语句与上一句关联起来显示三种状态的数量,数据库是MYsql。
      

  3.   

    2楼写的我整理了一下:select sum(case when arrival_time<'08:31:00' then 1 else 0 end) zc,
      sum(case when arrival_time>='08:31:00' then 1 else 0 end) cd
    现在问题就是把这一句和select kq_user.num,kq_user.name,kq_day.day_time,kq_day.arrival_time,kq_user.deptName from kq_user left join (kq_day) on (kq_user.num=kq_day.userid  and  kq_day.day_time='20101012') where kq_user.deptno!=8 order by arrival_time asc;关联起来查处三种状态的数量
      

  4.   

    1>--sqlsatement--方法一
    select 
      sum(case when to_char(arrival_time,'hh24miss')<='090000'then 1 else 0 end) 不迟到,
      sum(case when to_char(arrival_time,'hh24miss')>'090000'then 1 else 0 end)  迟到
       from tb_name
      
    2>--sqlstatement--方法二
     select a.flag, count(*) flag from (
    select case 
         when to_char(arrival_time,'hh24miss')<='090000' then '不迟到' else '迟到' end flag
    from tb_name ) a group by a.flag