このディレクトリの索引

# 出典 :: PostgreSQL Part.8 #703 # 年代別集計をしたく以下のようにしていますが # 結果が0でもその年代も表示したいのですができませんでしょうか? # # SELECT CASE # when r.age between 0 and 9 then '0 - 9' # when r.age between 10 and 19 then '10 - 19' # when r.age between 20 and 29 then '20 - 29' # when r.age between 30 and 39 then '30 - 39' # when r.age between 40 and 49 then '40 - 49' # when r.age between 50 and 59 then '50 - 59' # when r.age between 60 and 69 then '60 - 69' # when r.age between 70 and 79 then '70 - 79' # when r.age between 80 and 89 then '80 - 89' # when r.age between 90 and 99 then '90 - 99' # when r.age >=100 then '100' # end AS "age_group" # ,COUNT(CASE # when r.age between 0 and 9 then '0 - 9' # when r.age between 10 and 19 then '10 - 19' # when r.age between 20 and 29 then '20 - 29' # when r.age between 30 and 39 then '30 - 39' # when r.age between 40 and 49 then '40 - 49' # when r.age between 50 and 59 then '50 - 59' # when r.age between 60 and 69 then '60 - 69' # when r.age between 70 and 79 then '70 - 79' # when r.age between 80 and 89 then '80 - 89' # when r.age between 90 and 99 then '90 - 99' # when r.age >=100 then '100' # end) AS "age_count" # FROM rank as r # GROUP BY age_group # ORDER BY age_group; # # 年齢(島田,38). 年齢(新井,44). 年齢(安芸,26). 年齢(山下,45). 年齢(上田,83). 年齢(大井,33). 年齢(山崎,19). 年齢(山田,20). 年齢(石川,18). 年齢(佐々木,39). 年齢(甲斐,50). 年齢(原島,77). 年齢(依田,56). 年齢(今井,22). 年齢(高橋,29). 年齢(秋川,25). 年代別集計を結果が0でも表示する :- 年代別集計を(_年代別集計), 表示する(_年代別集計). 年代別集計を(_年代別集計) :- findall([_年代別表示,_度数],( between(0,10,N), 年代別に集計する(N,_年代別表示,_度数)),_年代別集計). 年代別に集計する(10,'100才以上',_度数) :- '100才以上を集計する'(_度数),!. 年代別に集計する(N,_年代別表示,_度数) :- '100才未満を集計する'(N,_年齢下限,_年齢上限,_年代別表示,_度数). '100才未満を集計する'(N,_年齢下限,_年齢上限,_年代別表示,_度数) :- 年代すなわち年齢範囲を生成して度数を集計する(N,_年齢下限,_年齢上限,_度数), atomic_list_concat([_年齢下限,才,'-',_年齢上限,才],_年代別表示). 年代すなわち年齢範囲を生成して度数を集計する(N,_年齢下限,_年齢上限,_度数) :- 年代すなわち年齢範囲を生成して(N,_年齢下限,_年齢上限), 年齢範囲の集計(_年齢下限,_年齢上限,_度数). 年代すなわち年齢範囲を生成して(N,_年齢下限,_年齢上限) :- _年齢下限 is N * 10, _年齢上限 is _年齢下限 + 9. '100才以上を集計する'(_度数) :- 度数(年齢が100歳以上,_度数). 年齢が100歳以上 :- 年齢(_,_年齢), _年齢 >= 100. 年齢範囲の集計(_年齢下限,_年齢上限,_度数) :- 度数(( 年齢が年齢範囲にある(_年齢下限,_年齢上限)),_度数). 年齢が年齢範囲にある(_年齢下限,_年齢上限) :- 年齢(_,_年齢), 年齢範囲にある(_年齢,_年齢下限,_年齢上限). 年齢範囲にある(_年齢,_年齢下限,_年齢上限) :- between(_年齢下限,_年齢上限,_年齢). 表示する(_年代別集計) :- forall(member([_年代別表示,_度数],_年代別集計), writef('%w,%w\n',[_年代別表示,_度数])). 度数(P,_度数) :- findall(1,P,L), length(L,_度数).