中の技術日誌ブログ

C#とC++/CLIと
VBと.NETとWindowsで戯れる
 

目次

Blog 利用状況

ニュース

自己紹介

東京でソフトウェアエンジニアをやっています。
お仕事大募集中です。
記事執筆や、講師依頼とかでも何でもどうぞ(*^_^*)
似顔絵 MSMVPロゴ
MSMVP Visual C# Since 2004/04-2013/03

記事カテゴリ

書庫

日記カテゴリ

00-整理

01-MSMVP

2012年12月18日 #

2012衆議院選挙 比例代表計算式

選挙終わりましたね。下手な事言うと捕まっちゃう(というほどひどいことしなければ問題ないのでしょうけど)期間も終わったし、ちょっと集計して遊んでみましょう。

今回の各党の各地域ごとの得票ちゃんと書いたサイト無かったので

よみうりオンラインより抜き書きしました。中央選管とかにあったのかなぁ。

http://www.yomiuri.co.jp/election/shugiin/2012/kaihyou/yc81.htm

1つ目のテーブル、各党のidと名前

2つめのテーブル各地域のid、名称,議席数

3つめのテーブル各地域における、各党の得票数

4つめのテーブル、ただのカウンター(ドント方式計算のため)CTEでうまく出来るかのテストだったのにうまくいかなかった。

で、以下がソース

declare @党 table
(
id int,
str nvarchar(100)
)

insert into @党 values(1, '民主');
insert into @党 values(2, '自民');
insert into @党 values(3, '未来');
insert into @党 values(4, '公明');
insert into @党 values(5, '維新');
insert into @党 values(6, '共産');
insert into @党 values(7, 'みんな');
insert into @党 values(8, '社民');
insert into @党 values(9, '大地');
insert into @党 values(10, '幸福');
insert into @党 values(11,	'改革');
insert into @党 values(12,	'国民');


declare @地域 table
(
 tiiki int,
 str nvarchar(max),
 giseki int 
)
insert into @地域 values(1, '北海道', 8 )
insert into @地域 values(2, '東北', 14 )
insert into @地域 values(3, '北関東', 20 )
insert into @地域 values(4, '東京', 17 )
insert into @地域 values(5, '南関東', 22)
insert into @地域 values(6, '北陸信越', 11 )
insert into @地域 values(7, '東海', 21 )
insert into @地域 values(8, '近畿', 29 )
insert into @地域 values(9, '中国', 11 )
insert into @地域 values(10, '四国', 6 )
insert into @地域 values(11, '九州', 21 )


Declare @票 table
(
tou int,
tiiki int,
hyou int
)
insert into @票 values(1, 1, 477356)	insert into @票 values(2, 1, 692304)	insert into @票 values(3, 1, 81838)	insert into @票 values(4, 1, 289011)	insert into @票 values(5, 1, 333760)	insert into @票 values(6, 1, 182968)	insert into @票 values(7, 1, 155522)	insert into @票 values(8, 1, 48351)	insert into @票 values(9, 1, 346848)	insert into @票 values(10, 1, 10506)	insert into @票 values(11, 1, 0)	insert into @票 values(12, 1, 0)
insert into @票 values(1, 2, 805709)	insert into @票 values(2, 2, 1238716)	insert into @票 values(3, 2, 391216)	insert into @票 values(4, 2, 398131)	insert into @票 values(5, 2, 725006)	insert into @票 values(6, 2, 256838)	insert into @票 values(7, 2, 306102)	insert into @票 values(8, 2, 160367)	insert into @票 values(9, 2, 0)	insert into @票 values(10, 2, 14825)	insert into @票 values(11, 2, 41587)	insert into @票 values(12, 2, 0)
insert into @票 values(1, 3, 976922)	insert into @票 values(2, 3, 1820116)	insert into @票 values(3, 3, 387625)	insert into @票 values(4, 3, 820358)	insert into @票 values(5, 3, 1169781)	insert into @票 values(6, 3, 367245)	insert into @票 values(7, 3, 787462)	insert into @票 values(8, 3, 118046)	insert into @票 values(9, 3, 0)	insert into @票 values(10, 3, 19795)	insert into @票 values(11, 3, 0)	insert into @票 values(12, 3, 0)
insert into @票 values(1, 4, 1008011)	insert into @票 values(2, 4, 1626057)	insert into @票 values(3, 4, 448689)	insert into @票 values(4, 4, 662743)	insert into @票 values(5, 4, 1298309)	insert into @票 values(6, 4, 484365)	insert into @票 values(7, 4, 762730)	insert into @票 values(8, 4, 136889)	insert into @票 values(9, 4, 0)	insert into @票 values(10, 4, 16620)	insert into @票 values(11, 4, 93194)	insert into @票 values(12, 4, 0)
insert into @票 values(1, 5, 1323048)	insert into @票 values(2, 5, 2020043)	insert into @票 values(3, 5, 477309)	insert into @票 values(4, 5, 810936)	insert into @票 values(5, 5, 1443270)	insert into @票 values(6, 5, 447890)	insert into @票 values(7, 5, 951294)	insert into @票 values(8, 5, 147191)	insert into @票 values(9, 5, 0)	insert into @票 values(10, 5, 20987)	insert into @票 values(11, 5, 0)	insert into @票 values(12, 5, 0)
insert into @票 values(1, 6, 682159)	insert into @票 values(2, 6, 1162095)	insert into @票 values(3, 6, 178403)	insert into @票 values(4, 6, 307138)	insert into @票 values(5, 6, 707497)	insert into @票 values(6, 6, 210219)	insert into @票 values(7, 6, 275399)	insert into @票 values(8, 6, 128443)	insert into @票 values(9, 6, 0)	insert into @票 values(10, 6, 15767)	insert into @票 values(11, 6, 0)	insert into @票 values(12, 6, 0)
insert into @票 values(1, 7, 1321402)	insert into @票 values(2, 7, 1966007)	insert into @票 values(3, 7, 511048)	insert into @票 values(4, 7, 779577)	insert into @票 values(5, 7, 1356970)	insert into @票 values(6, 7, 387461)	insert into @票 values(7, 7, 644087)	insert into @票 values(8, 7, 136316)	insert into @票 values(9, 7, 0)	insert into @票 values(10, 7, 29739)	insert into @票 values(11, 7, 0)	insert into @票 values(12, 7, 0)
insert into @票 values(1, 8, 1173051)	insert into @票 values(2, 8, 2326005)	insert into @票 values(3, 8, 481603)	insert into @票 values(4, 8, 1234345)	insert into @票 values(5, 8, 2999020)	insert into @票 values(6, 8, 732976)	insert into @票 values(7, 8, 635381)	insert into @票 values(8, 8, 133064)	insert into @票 values(9, 8, 0)	insert into @票 values(10, 8, 33509)	insert into @票 values(11, 8, 0)	insert into @票 values(12, 8, 0)
insert into @票 values(1, 9, 570764)	insert into @票 values(2, 9, 1210400)	insert into @票 values(3, 9, 141360)	insert into @票 values(4, 9, 493800)	insert into @票 values(5, 9, 622226)	insert into @票 values(6, 9, 174648)	insert into @票 values(7, 9, 209627)	insert into @票 values(8, 9, 68653)	insert into @票 values(9, 9, 0)	insert into @票 values(10, 9, 14383)	insert into @票 values(11, 9, 0)	insert into @票 values(12, 9, 0)
insert into @票 values(1, 10, 296914)	insert into @票 values(2, 10, 567193)	insert into @票 values(3, 10, 63830)	insert into @票 values(4, 10, 276907)	insert into @票 values(5, 10, 394393)	insert into @票 values(6, 10, 106976)	insert into @票 values(7, 10, 93090)	insert into @票 values(8, 10, 42762)	insert into @票 values(9, 10, 0)	insert into @票 values(10, 10, 8171)	insert into @票 values(11, 10, 0)	insert into @票 values(12, 10, 0)
insert into @票 values(1, 11, 993317)	insert into @票 values(2, 11, 1995521)	insert into @票 values(3, 11, 260994)	insert into @票 values(4, 11, 1043528)	insert into @票 values(5, 11, 1211996)	insert into @票 values(6, 11, 337573)	insert into @票 values(7, 11, 424892)	insert into @票 values(8, 11, 300708)	insert into @票 values(9, 11, 0)	insert into @票 values(10, 11, 31848)	insert into @票 values(11, 11, 0)	insert into @票 values(12, 11, 70847)

;

declare @counter table
(
cnt int
)
insert into @counter values(1)
insert into @counter values(2)
insert into @counter values(3)
insert into @counter values(4)
insert into @counter values(5)
insert into @counter values(6)
insert into @counter values(7)
insert into @counter values(8)
insert into @counter values(9)
insert into @counter values(10)
insert into @counter values(11)
insert into @counter values(12)
insert into @counter values(13)
insert into @counter values(14)
insert into @counter values(15)
insert into @counter values(16)
insert into @counter values(17)
insert into @counter values(18)
insert into @counter values(19)
insert into @counter values(20)

;

with カウンタcte(cnt)as
(
select 1
union all
select cnt+1 from カウンタcte
)


select top 10 * from カウンタcte

declare @議席数 table
(
tou int
)

declare @地域議席数 int
declare @地域id int

DECLARE cur CURSOR FOR

SELECT giseki, tiiki FROM @地域
open cur
FETCH NEXT from cur into @地域議席数, @地域id
WHILE @@FETCH_STATUS = 0
BEGIN
	insert into @議席数
	select top (@地域議席数) tou.id-- tou.str, 党別比例順別得票数.比例票
	from ( select hyou.tou, hyou.hyou / カウンタ.cnt as 比例票 from (select * from @票 where tiiki=@地域id) as hyou,@counter as カウンタ ) as 党別比例順別得票数
	inner join  @党 as tou on tou.id = 党別比例順別得票数.tou
	order by 比例票  desc


	FETCH NEXT from cur into @地域議席数, @地域id
END
close cur
deallocate cur












select tou, t.str as 党名, カウント
from
(
	select tou, count(*)as カウント from @議席数
	group by tou 
) as 集計
inner join @党 as t on t.id =  集計.tou

--inner join  @党 as tou on tou.id = hyou.tou

  党名 カウント
1 民主 30
2 自民 57
3 未来 7
4 公明 22
5 維新 40
6 共産 8
7 みんな 14
8 社民 1
9 大地 1

全国が一区だった場合の計算出している人はちょくちょくいるみたいなので、今の比例代表の仕組みのまま480議席にしてみましょう。

insert into @地域 values(1, '北海道', 21 )
insert into @地域 values(2, '東北', 37 )
insert into @地域 values(3, '北関東', 54 )
insert into @地域 values(4, '東京', 46 )
insert into @地域 values(5, '南関東', 59)
insert into @地域 values(6, '北陸信越', 29 )
insert into @地域 values(7, '東海', 56 )
insert into @地域 values(8, '近畿', 77 )
insert into @地域 values(9, '中国', 29 )
insert into @地域 values(10, '四国', 16 )
insert into @地域 values(11, '九州', 56 )

誤差が出ているところは適当に丸めたので、誤差は気にしないで下さいね。

tou 党名 カウント
1 民主 79
2 自民 143
3 未来 23
4 公明 56
5 維新 102
6 共産 27
7 みんな 38
8 社民 9
9 大地 3

ま、あくまで思考実験なのでこの方が良いとか思っているわけじゃないですよ。

ただこんな割れ方だと政権の行方も大分違うだろうなぁ。

ちなみに全国1区の比例代表の結果とそう違わない値なのが面白くないですね。

http://togetter.com/li/424427

posted @ 23:03 | Feedback (4)