2012-11-26 4 views
0

테이블 직원 (id, dept_id, salary, hire_date, job_id)이 있습니다. 다음 쿼리를 실행해야합니다.최소값 계산

고용 된 직원이 가장 적은 요일에 고용 된 모든 직원을 표시하십시오.

나는이 쿼리를 수행했지만 최소한을 얻을 수는 없습니다. 올바른지 확인하십시오.

  select id, WEEKDAY(hire_date)+1 as days,count(WEEKDAY(hire_date)+1) as count 

      from test.employee group by days 
+0

'1)'은 무엇입니까? 이게 당신의 숙제입니까? –

+0

아니오, 집이 아닌 일 – Nyfer

+0

그럼 뭐야? 유망한 고용주를위한 시험입니까? 명확하게 스케치되어 보입니다 ... 질문이 구조화되는 방식인데, 거의 확실하게 테스트에서 나온 것입니다. 나는 개인적으로 누군가가 속이는 것을 돕는 것에 대해 기분이 좋지 않습니다. –

답변

0
select min(id), WEEKDAY(hire_date)+1 as days,count(WEEKDAY(hire_date)+1) as count 

     from test.employee group by days 
+1

은 그가 묻는 것을 전혀하지 않을 것입니다. –

+0

최소 ID가 필요합니다. 최소 ID는 – Nyfer

1

이 당신에게 직원의 수를 최소 고용 된에 평일 얻어야한다 :

SELECT 
    count(id) as `Total`, 
    WEEKDAY(hire_date) as `DoW` 
FROM 
    test.employee 
GROUP BY `DoW` 
ORDER BY `Total` DESC LIMIT 1; 
+0

입니다. 모든 데이터베이스가 '별칭 별 그룹'을 지원하지는 않습니다. 그러나 모두 '그룹 별 2'지원 – Bohemian

1
select id from test.employee where hire_date in 
    (select count(id) count,hire_date 
     from test.employee 
     order by count desc 
     limit 1) 

이 그것으로,

1

당신이 시도 할 수 있습니다 작동합니다을 같은 최소 인원이 고용 된 주중 날이 여러 개인 경우 한 레코드로 제한되지 않습니다. 실제로 그것은 의미가 있습니다. 다음은 샘플 데이터를 기반으로합니다.

검색어 :

-- find minimum id count 
SELECT MIN(e.counts) INTO @min 
FROM (SELECT COUNT(*) as counts, 
     WEEKDAY(hire_date+1) as day 
FROM employee 
GROUP BY WEEKDAY(hire_date+1)) e 
; 

-- show weekdays with minimum id counts 
SELECT e2.counts as mincount, 
WEEKDAY(e1.hire_date+1) as weekday 
FROM employee e1 
    JOIN (SELECT COUNT(id) as counts, 
     WEEKDAY(hire_date+1) as day 
     FROM employee 
     GROUP BY day 
     HAVING COUNT(*) = @min) e2 
    ON WEEKDAY(e1.hire_date+1) = e2.day; 

결과 :

MINCOUNT WEEKDAY 
1   6 
1   3 
1   4 
1   2 
0
 SELECT 
      * 
     FROM 
     employee 
     WHERE 
      DAYOFWEEK(hire_date) 
     IN 
     (
      SELECT 
      weekday 
     FROM 
      (
      SELECT 
     count(*) as bcount, 
     DAYOFWEEK(hire_date) as weekday 
    FROM 
     employee as a 
    GROUP BY 
     weekday 
    HAVING 
     bcount = (
      SELECT 
       MIN(tcount) 
      FROM 
       (
        SELECT 
         count(*) as tcount, 
         DAYOFWEEK(hire_date) as weekday 
        FROM 
         employee 
        GROUP BY 
         weekday 

       ) as t 
     ) 
    ) as q