각 개별 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입니다.
당신은'SUM (below 26_loneink)'와'SUM (loneink)'열을 따로 나열하려 했습니까? 'SUM()'의 결과가 10 진수 형 (또는 MonetDB에서 호출 된 것)으로 형변환 된 다음 – cha
@cha로 나눌 필요가있는 경우 일 수 있습니다. 'MIN', 'AVG'및 'MAX'를 확인했습니다. 'over26_2007'에서'loneink'와'below26_loneink' 둘 다에 대해. 그게 잘 됐어. 'SUM'이 문제가되어서는 안된다는 뜻이 아닌가? 아니면 나는 무엇을 놓치고 있습니까? –
'loneink' 란 어떤 열 유형입니까? – cha