更進階的 SQL 查詢

使用 pandas 的精實資料導入

Amany Mahfouz

Instructor

取得 DISTINCT 值

  • SELECT DISTINCT 取得一或多欄的唯一值
  • 語法:
    SELECT DISTINCT [column names] FROM [table];
    
  • 移除重複記錄:
    SELECT DISTINCT * FROM [table];
    
/* 取得唯一的街道地址與行政區 */
SELECT DISTINCT incident_address, 
       borough
  FROM hpd311calls;
使用 pandas 的精實資料導入

聚合函式

  • 直接從資料庫查詢描述統計
  • 聚合函式
    • SUM
    • AVG
    • MAX
    • MIN
    • COUNT
使用 pandas 的精實資料導入

聚合函式

  • SUMAVGMAXMIN
    • 各自接受單一欄位名稱
      SELECT AVG(tmax) FROM weather;
      
  • COUNT
    • 取得符合查詢條件的列數
      SELECT COUNT(*) FROM [table_name];
      
    • 取得欄位中的唯一值數量
      SELECT COUNT(DISTINCT [column_names]) FROM [table_name];
      
使用 pandas 的精實資料導入

GROUP BY

  • 聚合函式預設回傳單一摘要統計
  • GROUP BY 依類別彙總資料
  • 記得同時選出用來分組的欄位!
/* 依行政區統計 plumbing 通報數 */
SELECT borough, 
       COUNT(*) 
  FROM hpd311calls
 WHERE complaint_type = 'PLUMBING'
 GROUP BY borough;
使用 pandas 的精實資料導入

依群組計數

# 建立資料庫引擎
engine = create_engine("sqlite:///data.db")

# 撰寫查詢:依行政區統計 plumbing 通報數 query = """SELECT borough, COUNT(*) FROM hpd311calls WHERE complaint_type = 'PLUMBING' GROUP BY borough;"""
# 查詢資料庫並建立資料框 plumbing_call_counts = pd.read_sql(query, engine)
使用 pandas 的精實資料導入

依群組計數

print(plumbing_call_counts)
         borough  COUNT(*)
0          BRONX      2016
1       BROOKLYN      2702
2      MANHATTAN      1413
3         QUEENS       808
4  STATEN ISLAND       178
使用 pandas 的精實資料導入

一起來練習吧!

使用 pandas 的精實資料導入

Preparing Video For Download...