loneink
個人 ID ( )ごとに 2007 年の年収( ) があり、企業 ID ( ) ごとに、1980 年以降に生まれた労働者 (誕生年は ) に支払われた賃金総額の総額personlopnr
を計算したいと考えています。ただし、以下のコードは、ほとんどのケースで 0 で残りのケースで 1 の列を生成します。(明確にするために、以下のコードは1 しか生成しません。その条件がなく、絶対にゼロで割らないようにするためのゼロ カムバックがあります。) 若い労働者がいない会社はたくさんありますが、そうではないことは明らかです。他のすべての企業は若者のみです。peorglopnr
fodelsear
share
WHERE loneink > 0
NULLIF
ここで何が問題なのですか?これは、年配の労働者の収入がゼロである「若い賃金」変数を生成する方法ではなかったので、合計は若者だけのものですか? または、理論的にはこれで問題ありませんが、CASE WHEN
間違っていますか? またはSUM
/は?SUM
と誤動作します。GROUP BY
これを行うためのより良い方法は何ですか?
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
);
私の実際の使用例は MonetDB です。そのため、SQL:2003 ソリューションのみに固執し、mySQL や Oracle 拡張機能を使用しないことを願っています。