2012-07-17 4 views
1

테이블 직원이 [employee_id, age]이고 직원 나이를 18 ~ 20 세 및 26 ~ 40으로 반환하려는 경우직원 테이블에서 연령 간격에 따라 백분율을 반환합니다.

Age Interval Percent 
18-20   35% 
26-40   40 % 

감사

Select t.range as [age interval] , Count(*) as 'number of appereances' from 
(Select case when age between 18 and 26 then '18-26' 
when age between 26-40 then '26-40' end as range from employees) t 
group by t.range 
+0

질문은 무엇입니까? –

+0

그걸 반환하는 쿼리는 무엇입니까? 알아낼 수 없습니다. – TBogdan

+1

[무엇을 시도해 봤습니까?] (http://whathaveyoutried.com/) –

답변

3
select '18-20', 
    count(case when age between 18 and 20 then 1 end) * 100.0/count(*) 
from employees 

union all 

select '26-40', 
    count(case when age between 26 and 40 then 1 end) * 100.0/count(*) 
from employees 

SQL Fiddle Example #1

당신은 WR도 수 ITE는 다음과 같이 약간 청소기 (쉽게 유지하기 위해) 버전 :

select cast(r.Start as varchar(3)) + '-' + cast(r.[End] as varchar(3)), 
    count(case when e.age between r.Start and r.[End] then 1 end) * 100.0/(select count(*) from employees) 
from (
    select 18 as Start, 20 as [End] 
    union all  
    select 21 as Start, 25 as [End] 
    union all  
    select 26 as Start, 40 as [End] 
) r 
left outer join employees e on e.age between r.Start and r.[End] 
group by cast(r.Start as varchar(3)) + '-' + cast(r.[End] as varchar(3)) 

SQL Fiddle Example #2

+0

감사합니다. – TBogdan

1

당신은 일반적으로 창 기능이 이런 종류의 물건을하고 싶지는 :

Select t.range as [age interval] , Count(*) as 'number of appereances', 
     cast(count(*)*100.0/tot as varchar(256))+'%' as 'percent' 
from (Select (case when age between 18 and 26 then '18-26' 
        when age between 26 and 40 then '26-40' 
       end) as range, 
      count(*) over (partition by NULL) as tot 
     from employees) t 
group by t.range 

또한 수를 포맷 당신이 그랬던 것처럼.

-1
Select 
CAST(ROUND(count(case when 18 <= age and age < 26 then 1 end) * 100.0/count(*),2)AS NUMERIC(8,2)) as '18-26' 
,CAST(ROUND(count(case when 26 <= age and age < 40 then 1 end) * 100.0/count(*),2)AS NUMERIC(8,2)) as '26-40' 
From employees 

플러스 obtimisée

+0

이 질문에 대한 답변이 이미 있습니다. 귀하의 대답을 더 나은 해결책으로 만드는 이유를 설명해주십시오. 영어로만 답변하십시오. – ottel142

관련 문제