8. 简单 SQL 练习

使用 nyc_census_blocks 表,回答以下问题(不要偷看答案!)。

以下是一些帮助您入门的信息。回顾 关于我们的数据 部分中的 nyc_census_blocks 表定义。

blkid

一个 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
    
  • 纽约市有多少条街道以“B”开头?

    SELECT Count(*)
      FROM nyc_streets
      WHERE name LIKE 'B%';
    
    1282
    
  • 纽约市的人口是多少?

    SELECT Sum(popn_total) AS population
      FROM nyc_census_blocks;
    
    8175032
    

    注意

    什么是这个 AS?您可以使用别名给表或列起另一个名字。别名可以使查询更容易编写和阅读。因此,我们输出的列名不是 sum,而是将其写成更易读的 population

  • 布朗克斯的人口是多少?

    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 聚合函数,返回记录集中记录的总和。