0
私は、同じ人物のために、記録が不十分で社会的人口統計情報の一貫性のないレコードを掃除しています。私は一人ひとりのために最も一般的に現れる価値(モード)を取りたいと思っています。 (民族複数の列で最も頻繁に発生する(モーダル)値を取る
DROP TABLE dbo.table
SELECT DISTINCT [id], [ethnic_group] AS [ethnic_mode], ct INTO dbo.table
FROM (
SELECT row_number() OVER (PARTITION BY [id] ORDER BY count([ethnic_group]) DESC) as rn, count([ethnic_group]) as ct, [ethnic_group], [id]
FROM
dbo.mytable GROUP BY [id], [ethnic_group]) ranked
where rn = 1
ORDER BY ct DESC
しかし、私はいくつかの変数のためにこれをしたい:それをする
一つの方法は、各IDの最高回数を保持したまま、idでパーティション分割し、各値が発生した回数をカウントすることですグループ、所得グループなど)。
1つのステートメント内で複数の変数のモードを選択し、(変数ごとに別のテーブルを作成するのではなく)1つのテーブルに挿入する方法を教えてください。
次の表は、私が何をしたいの例を示します。
DROP TABLE mytable;
CREATE TABLE mytable(
id VARCHAR(2) NOT NULL PRIMARY KEY
,ethnic_group VARCHAR(12) NOT NULL
,ethnic_mode VARCHAR(11) NOT NULL
,income VARCHAR(6) NOT NULL
,income_mode VARCHAR(11) NOT NULL
);
INSERT INTO mytable(id,ethnic_group,ethnic_mode,income,income_mode) VALUES ('id','ethnic_group','ethnic_mode','income','income_mode');
INSERT INTO mytable(id,ethnic_group,ethnic_mode,income,income_mode) VALUES ('1','white','white','middle','middle');
INSERT INTO mytable(id,ethnic_group,ethnic_mode,income,income_mode) VALUES ('1','white','white','middle','middle');
INSERT INTO mytable(id,ethnic_group,ethnic_mode,income,income_mode) VALUES ('1','mixed','white','high','middle');
INSERT INTO mytable(id,ethnic_group,ethnic_mode,income,income_mode) VALUES ('2','asian','asian','middle','middle');
INSERT INTO mytable(id,ethnic_group,ethnic_mode,income,income_mode) VALUES ('2','mixed','asian','middle','middle');
INSERT INTO mytable(id,ethnic_group,ethnic_mode,income,income_mode) VALUES ('2','asian','asian','middle','middle');
私はNULL値を含める(そう、彼らはほとんどがnullの場合、モードはまだNULLです)。実際のデータでこれを試したところ、NULLは無視され、モードはNULL以外の値のみに基づいて割り当てられました。 – user2964644
@ user2964644私はNULL値を処理するために私の答えを更新しました。 –