1

最も多くの従業員を雇用した曜日に雇用されたすべての従業員の名前を表示します。

テーブル:

Steven  06/17/1987
Neena   09/21/1989
Lex     01/13/1993
Alex    01/03/1990
Bruce   05/21/1991
Diana   02/07/1999
Kevin   11/16/1999
Trenna  10/17/1995
Curtis  01/29/1997
Randall 03/15/1998
Peter   07/09/1998
Eleni   01/29/2000
Ellen   05/11/1996
Jonath  03/24/1998
Kimber  05/24/1999
Jenni   09/17/1987
Michael 02/17/1996
Pat     08/17/1997
Shelley 06/07/1994
William 06/07/1994

私がこれまでに持っているもの。

SELECT FIRST_NAME, to_char(hire_date,'d') AS DOW FROM EMPLOYEES;

Steven  4
Neena   5
Lex     4
Alex    4
Bruce   3
Diana   1
Kevin   3
Trenna  3
Curtis  4
Randall 1
Peter   5
Eleni   7
Ellen   7
Jonath  3
Kimbe   2
Jenni   5
Michael 7
Pat     1
Shelley 3
William 3

日曜日は 1、月曜日は 2 など...

ここで、繰り返し数が最大のものを選択する必要があります。

表を見ると、3 (火曜日) であることがわかります。サブクエリを使用して取得する必要があることはわかっていますが、それはありますか?

4

3 に答える 3

4

これには分析関数を使用する傾向があります。

select e.*
from (SELECT to_char(hire_date, 'd') AS DOW, count(*) as cnt,
             row_number() over (order by count(*) desc) as seqnum
      FROM EMPLOYEES
     ) dow join
     EMPLOYEEs e
     on dow.DOW = to_char(e.hire_date, 'd') and seqnum = 1;
于 2013-09-11T01:09:59.013 に答える
1

上記のクエリを拡張する 1 つの方法 ( SQL Fiddle Example ):

SELECT FIRST_NAME, to_char("hire_date", 'd') AS DOW
FROM EMPLOYEES
WHERE to_char("hire_date", 'd') =
  (
      SELECT b.DOW 
      FROM
      (
        select a.*, ROWNUM rnum 
        from (
          SELECT to_char("hire_date", 'd') AS DOW, COUNT(1) AS cnt
          FROM EMPLOYEES 
          GROUP BY to_char("hire_date", 'd')
          ORDER BY cnt DESC
        ) a
        where rownum = 1
      ) b
  )
于 2013-09-11T00:41:47.350 に答える
1
select * 
  from employees
 where to_char(hire_date, 'd') = (
     select max(to_char(hire_date, 'd')) keep (dense_rank last order by count(*))
       from employees 
      group by to_char(hire_date, 'd')
 );

SQLフィドル

于 2013-09-11T01:51:19.030 に答える