Oracle11g 如何在oracle中从表中获取列值和列计数

Oracle11g 如何在oracle中从表中获取列值和列计数,oracle11g,Oracle11g,我需要oracle中表中的列值和相同的列计数 以下是查询: select username, count(username) from ind_emp_leaves where status != 'Approved' and (leavefromdate BETWEEN to_date('08-09-2013','dd/MM/yyyy') AND to_date('11-09-2013','dd/MM/

我需要oracle中表中的列值和相同的列计数

以下是查询:

select username,
       count(username) 
  from ind_emp_leaves 
 where  status != 'Approved' 
   and  (leavefromdate BETWEEN to_date('08-09-2013','dd/MM/yyyy') 
                           AND to_date('11-09-2013','dd/MM/yyyy')) OR
        (LEAVETODATE  BETWEEN to_date('08-09-2013','dd/MM/yyyy') 
                          AND to_date('11-09-2013','dd/MM/yyyy')) 
上面的查询显示错误:

SQL错误:ORA-00937:没有单个组函数


如果没有用户名字段,它将显示计数值,但我同时需要用户名值和用户名计数。

假设您需要每个用户的计数,这将给出正确的结果:

select username, count(*) from ind_emp_leaves 
where  (status != 'Approved') 
  and  ((leavefromdate BETWEEN to_date('08-09-2013','dd/MM/yyyy') 
     AND to_date('11-09-2013','dd/MM/yyyy')) 
  OR (LEAVETODATE  BETWEEN to_date('08-09-2013','dd/MM/yyyy') 
     AND to_date('11-09-2013','dd/MM/yyyy')))
group by username

请注意,我在leavedate部分周围添加了其他参数-我假设您希望在两个时间间隔检查“状态!=‘已批准’”部分,而不仅仅是第一个时间间隔

您可以使用以下代码获得所需的结果

  select username, count(*) from ind_emp_leaves 
     where  status != 'Approved')
     and  ((leavefromdate BETWEEN to_date('08-09-2013','dd/MM/yyyy') 
     AND to_date('11-09-2013','dd/MM/yyyy')) 
     OR (LEAVETODATE  BETWEEN to_date('08-09-2013','dd/MM/yyyy') 
     AND to_date('11-09-2013','dd/MM/yyyy')))
     group by username

嘿,如果你正在使用聚合函数,比如

AVG
COLLECT
CORR
CORR_*
COUNT
COVAR_POP
COVAR_SAMP
CUME_DIST
DENSE_RANK
FIRST
GROUP_ID
GROUPING
GROUPING_ID
LAST

您应该使用group by function

欢迎来到StackOverflow。请以可读的方式格式化您的代码(我已经为您完成了)。如果我删除了其他参数,则我的计数显示错误,以前我的计数为2@appu对不起,我不明白你想说什么-你在运行我的查询时出错了吗?