2014-06-12 4 views
0

각 개별 ID (personlopnr)에 대해 2007 년에 연간 수입 (loneink)을 가지고 있으며 각 회사 ID (peorglopnr)에 대한 총 임금 계산 방법을 계산하고 싶습니다 1980 년 (출생 연도는 fodelsear) 이후에 태어난 노동자에게 그러나 아래 코드는 케이스의 대다수가 0이고 나머지가 1 인 열 share을 생성합니다. (분명히하기 위해, WHERE loneink > 0 코드는 단지 1을 생성합니다. 즉, 조건없이 제로 컴백을하고 NULLIF을 사용하면 0으로 나눌 수 없습니다.) 젊은 근로자가없는 많은 회사가 있지만 분명히 그렇지 않습니다. 다른 모든 회사는 젊을뿐입니다.조건을 만족하는 하위 샘플에 대한 집계 비율을 계산합니다.

무엇이 잘못 되었나요? 이것은 고령 근로자의 소득이 0 인 "젊은 임금"변수를 산출하는 방법이 아니 었으므로 합계는 젊은 사람들에게만 적용 되는가? 또는 이론적으로 이것은 괜찮습니다. 그러나 CASE WHEN이 잘못 되었습니까? 또는 SUM/SUM의 오 검출은 GROUP BY입니까?

더 좋은 방법은 무엇입니까? 2003 솔루션 만, 아니 MySQL의 또는 Oracle 확장 :

CREATE VIEW sys.over26_2007 (personlopnr,peorglopnr,loneink,below26_loneink) AS (
SELECT personlopnr,peorglopnr,loneink, CASE WHEN fodelsear < 1981 THEN 0 ELSE loneink END AS below26_loneink 
FROM sys.ds_chocker_lev_lisaindivid_2007 WHERE loneink > 0 
); 
SELECT COUNT(*) FROM over26_2007; 

CREATE VIEW sys.share26_2007 (peorglopnr,share26_2007) AS (
SELECT peorglopnr, SUM(below26_loneink)/SUM(loneink) 
FROM sys.over26_2007 
WHERE loneink > 0 
GROUP BY peorglopnr 
); 

내 실제 사용 사례는 너무 잘하면 우리가 SQL에 충실 할 수 MonetDB입니다.

+0

당신은'SUM (below 26_loneink)'와'SUM (loneink)'열을 따로 나열하려 했습니까? 'SUM()'의 결과가 10 진수 형 (또는 MonetDB에서 호출 된 것)으로 형변환 된 다음 – cha

+0

@cha로 나눌 필요가있는 경우 일 수 있습니다. 'MIN', 'AVG'및 'MAX'를 확인했습니다. 'over26_2007'에서'loneink'와'below26_loneink' 둘 다에 대해. 그게 잘 됐어. 'SUM'이 문제가되어서는 안된다는 뜻이 아닌가? 아니면 나는 무엇을 놓치고 있습니까? –

+0

'loneink' 란 어떤 열 유형입니까? – cha

답변

1

우선보기를 만들 때 case 문에 0.0을 사용해야합니다.

CREATE VIEW sys.over26_2007 (personlopnr,peorglopnr,loneink,below26_loneink) AS (
SELECT personlopnr,peorglopnr,loneink, 
     CASE WHEN fodelsear < 1981 THEN 0.0 ELSE loneink END AS below26_loneink 
FROM sys.ds_chocker_lev_lisaindivid_2007 WHERE loneink > 0.0 
); 

다음, 다른 관점에서뿐만 아니라 두 배로 합계를 CAST :

CREATE VIEW sys.share26_2007 (peorglopnr,share26_2007) AS (
SELECT peorglopnr, CAST(SUM(below26_loneink) AS double)/CAST(SUM(loneink) AS double) 
FROM sys.over26_2007 
WHERE loneink > 0 
GROUP BY peorglopnr 
); 
이 뷰의 열 (귀하의 경우 더블) 올바른 데이터 형식을 사용하여 생성되어 있는지 확인합니다
관련 문제