8. 単純なSQLの練習¶
nyc_census_blocks
テーブルを使って、次の問に答えます (回答を覗かないで下さい!)。
始めるのに助けになる情報を示します。About Our Data セクションの nyc_census_blocks
テーブル定義を思い出して下さい。
blkid |
**block**を一意に識別する15桁のコードです。例: 360050001009000 |
popn_total |
ブロック内の人の合計 |
popn_white |
ブロック内で「白人」を自認する人の数 |
popn_black |
ブロック内で「黒人」を自認する人の数 |
popn_nativ |
ブロック内で「ネイティブアメリカン」と自認する人の数 |
popn_asian |
ブロック内で「アジア人」と自認する人の数 |
popn_other |
ブロック内で他のカテゴリを自認する人の数 |
hous_total |
ブロック内の住宅戸数 |
hous_own |
ブロック内の持ち家の戸数 |
hous_rent |
ブロック内の賃貸住宅の戸数 |
boroname |
ニューヨーク市の行政区名。マンハッタン区、ブロンクス区、ブルックリン区、スタテンアイランド区、クイーンズ区 |
geom |
ブロックのポリゴン |
また、便利と思う可能性がありそうな、一般的な SQL 集約関数をここで示します:
avg() - レコードの集合の平均値
sum() - レコードの集合の合計値
count() - レコードの集合のレコード数
では問題です:
nyc_streets テーブルのレコード数はいくつでしょうか?
SELECT Count(*) FROM nyc_streets;
19091
ニューヨーク市のストリート数はいくつでしょうか?
SELECT Count(*) FROM nyc_streets WHERE name LIKE 'B%';
1282
ニューヨーク市の人口はいくらでしょうか?
SELECT Sum(popn_total) AS population FROM nyc_census_blocks;
8175032
注釈
この"AS"とは何でしょう? テーブルまたはカラムに、エイリアスを使って他の名前を与えることができます。エイリアスは読み書きともにクエリを簡単にしてくれます。
sum
という出力カラム名の代わりに、カラム名が読みやすいpopulation
にするために AS を書きます。ブロンクスの人口はいくらでしょうか?
SELECT Sum(popn_total) AS population FROM nyc_census_blocks WHERE boroname = 'The Bronx';
1385108
各行政区にはそれぞれどれだけの地区があるでしょうか?
SELECT boroname, count(*) FROM nyc_neighborhoods GROUP BY boroname;
boroname | count ---------------+------- Queens | 30 Brooklyn | 23 Staten Island | 24 The Bronx | 24 Manhattan | 28
それぞれの行政区で、白人の人口比率は何パーセントでしょうか?
SELECT boroname, 100.0 * Sum(popn_white)/Sum(popn_total) AS white_pct FROM nyc_census_blocks GROUP BY boroname;
boroname | white_pct ---------------+------------------ Brooklyn | 42.8011737932687 Manhattan | 57.4493039480463 The Bronx | 27.9037446899448 Queens | 39.722077394591 Staten Island | 72.8942034860154
8.1. 関数リスト¶
avg(expression): 数値カラムの値の平均を返す PostgreSQL 集約関数。
count(expression): レコードの集合のレコード数を返す PostgreSQL 集約関数。
sum(expression): レコード集合のレコードの合計を返すPostgreSQL 集約関数です。