Загрузка нескольких таблиц с помощью объединений

Эффективный импорт данных с pandas

Amany Mahfouz

Instructor

Ключи

  • Записи в базе данных имеют уникальные идентификаторы, или ключи

Данные звонков 311 с выделенным столбцом unique_key. Уникальные ключи — числа.

Эффективный импорт данных с pandas

Ключи

  • Записи в базе данных имеют уникальные идентификаторы, или ключи

Данные каталога курсов с выделенным столбцом course_code. Коды состоят из аббревиатур предметов и чисел.

Эффективный импорт данных с pandas

Ключи

  • Записи в базе данных имеют уникальные идентификаторы, или ключи

Данные каталога курсов с выделенным столбцом instructor_id. Значения — 9-значные целые числа.

Эффективный импорт данных с pandas

Ключи

Таблица профессоров с выделенным столбцом id. Значения — 9-значные целые числа, как instructor_id в каталоге курсов.

Эффективный импорт данных с pandas

Ключи

Данные каталога курсов с присоединённым столбцом имён преподавателей

Эффективный импорт данных с pandas

Объединение таблиц

Данные о погоде с выделенным столбцом date

Данные звонков 311 с выделенным столбцом created_date

Эффективный импорт данных с pandas

Объединение таблиц

SELECT *
  FROM hpd311calls
Эффективный импорт данных с pandas

Объединение таблиц

SELECT *
  FROM hpd311calls
       JOIN weather 
       ON hpd311calls.created_date = weather.date;
  • При работе с несколькими таблицами используйте точечную нотацию (table.column)
  • Объединение по умолчанию возвращает только записи, чьи ключи есть в обеих таблицах
  • Убедитесь, что типы данных ключей совпадают — иначе совпадений не будет
Эффективный импорт данных с pandas

Объединение и фильтрация

/* Get only heat/hot water calls and join in weather data */
SELECT *
  FROM hpd311calls
       JOIN weather 
       ON hpd311calls.created_date = weather.date
 WHERE hpd311calls.complaint_type = 'HEAT/HOT WATER';
Эффективный импорт данных с pandas

Объединение и агрегация

/* Get call counts by borough */
SELECT hpd311calls.borough, 
         COUNT(*)
  FROM hpd311calls
 GROUP BY hpd311calls.borough;
Эффективный импорт данных с pandas

Объединение и агрегация

/* Get call counts by borough
   and join in population and housing counts */
SELECT hpd311calls.borough, 
       COUNT(*), 
       boro_census.total_population,
       boro_census.housing_units
  FROM hpd311calls
 GROUP BY hpd311calls.borough
Эффективный импорт данных с pandas

Объединение и агрегация

/* Get call counts by borough
   and join in population and housing counts */
SELECT hpd311calls.borough, 
       COUNT(*), 
       boro_census.total_population,
       boro_census.housing_units
  FROM hpd311calls
       JOIN boro_census 
       ON hpd311calls.borough = boro_census.borough
 GROUP BY hpd311calls.borough;
Эффективный импорт данных с pandas
query = """SELECT hpd311calls.borough, 
                    COUNT(*), 
                    boro_census.total_population,
                    boro_census.housing_units
             FROM hpd311calls
                  JOIN boro_census 
                  ON hpd311calls.borough = boro_census.borough
            GROUP BY hpd311calls.borough;"""

call_counts = pd.read_sql(query, engine)
print(call_counts)
         borough  COUNT(*)  total_population  housing_units
0          BRONX     29874           1455846         524488
1       BROOKLYN     31722           2635121        1028383
2      MANHATTAN     20196           1653877         872645
3         QUEENS     11384           2339280         850422
4  STATEN ISLAND      1322            475948         179179
Эффективный импорт данных с pandas

Обзор

  • Порядок ключевых слов SQL
    • SELECT
    • FROM
    • JOIN
    • WHERE
    • GROUP BY
Эффективный импорт данных с pandas

Давайте потренируемся!

Эффективный импорт данных с pandas

Preparing Video For Download...