我可以简化sql吗?

时间:2014-02-14 03:01:37

标签: sql oracle

sql是:

select count(*)
  from (select *
          from T_LOGGINGINFO
          where to_char(LOGINTIME, 'YYYY-MM') = '2012-05'
          group by USERNAME)

2 个答案:

答案 0 :(得分:6)

简洁是机智(和内衣)的灵魂,但清晰度是代码的灵魂。尝试:

SELECT COUNT(DISTINCT USERNAME)
  FROM T_LOGGINGINFO
  WHERE LOGINTIME BETWEEN TO_DATE('01-MAY-2012 00:00:00', 'DD-MON-YYYY HH24:MI:SS')
                      AND TO_DATE('31-MAY-2012 23:59:59', 'DD-MON-YYYY HH24:MI:SS')

更清晰的IMO,可能更快,因为不必对表中的每一行执行TO_CHAR,并且可能允许使用(LOGINTIME, USERNAME)上的索引。 YMMV。

分享并享受。

答案 1 :(得分:3)

   select COUNT(DISTINCT USERNAME)
     from T_LOGGINGINFO
    where to_char(LOGINTIME,'YYYY-MM')='2012-05'

注意:to_char(LOGINTIME,'YYYY-MM')不允许使用LOGINTIME列的索引,除非您有特定的功能索引。