このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/db/1294641578/678
#  point順に並び替え、ランクを表示する 
#   
#  テーブル名 :tbl_point 
#  フィールド名:point 
#                name 
#                gender 
#   
#  表示    :p_rank, name, gender, point 
#   
#  select rank() over (order by [point] desc) as [p_rank], name, point from [tbl_point]; 
#   
#  p_rank | name | gender | point 
#   
#  1      | hoge |      1 |    98 
#  2    | fuga  |      2 |    80 
#  3     | poyo |      2 |    70 
#  4     | boke |      1 |    60 
#   
#  ここまではできるのですが 
#   
#  p_rank | mp_rank | wp_rank | name | gender | point 
#   
#  1      |     1   |         | hoge |      1 |    98 
#  2      |         |      1  | fuga |      2 |    80 
#  3     |         |      2  | poyo |      2 |    70 
#  4     |     2   |         | boke |      1 |    60 
#   
#  gender毎のも表示するにはどうすればいいですか? 
#   

'gender毎のも表示する' :-
        ランクの作成(LL_R,LL1_R,LL2_R),
        write('p_rank | mp_rank | wp_rank | name | gender | point\n\n'),
        append(L0,[[_point,_gender,_name]|R],LL_R),
        性別ランクを得る(LL1_R,LL2_R,_name,_gender,_mp_rank),
        表示する(L0,_point,_name,_gender,_mp_rank),
        R = [].

ランクの作成(LL_R,LL1_R,LL2_R) :-
        ポイントランクの作成(LL_R),
        男性ランクの作成(LL1_R),
        女性ランクの作成(LL2_R).

ポイントランクの作成(LL_R) :-
        findall([_point,_name,_gender],(
                    tbl_point(_point,_name,_gender)),
                LL),
        rsort(LL,LL_R),!.

男性ランクの作成(LL1_R) :-
        findall([_point,_name],(
                    tbl_point(_point,_name,1)),
                LL1),
        rsort(LL1,LL1_R).

女性ランクの作成(LL2_R) :-
        findall([_point,_name],(
                    tbl_point(_point,_name,2)),
                LL2),
        rsort(LL2,LL2_R),

性別ランクを得る(LL1_R,LL2_R,_name,1,_rank) :-
        nth1(_rank,LL1_R,[_,_name]),!.
性別ランクを得る(LL1_R,LL2_R,_name,2,_rank) :-
        nth1(_rank,LL2_R,[_,_name]),!.

表示する(L0,_point,_name,1,_mp_rank) :-
        length([_|L0],_p_rank),
        writef('%7l|%9c|%9c|%6c|%8c|%6r\n',[_p_rank,_mp_rank,' ',_name,1,_point]),!.
表示する(L0,_point,_name,2,_wp_rank) :-
        length([_|L0],_p_rank),
        writef('%7l|%9c|%9c|%6c|%8c|%6r\n',[_p_rank,' ',_wp_rank,_name,2,_point]),!.

rsort(L1,L2) :-
        sort(L1,L3),
        reverse(L3,L2).