Как объединить две таблицы на основе двух условий и суммировать столбец? - PullRequest
0 голосов
/ 24 марта 2020

Я делаю sql -подобные запросы на pyspark. У меня есть две таблицы table и table1

table.show()

+--------------------+---------------+-------------------+----------+----------+-----+
|          identifier|identifier_type|          timestamp|device_lat|device_lon|count|
+--------------------+---------------+-------------------+----------+----------+-----+
|ccf7758a-155f-4eb   |           gaee|2020-03-17 13:00:00| 40.764214| -73.98244|   19|
|ccf7758a-155f-4eb   |           gaee|2020-03-17 14:00:00| 40.761467| -73.98039|   14|
|ccf7758a-155f-4eb   |           gaee|2020-03-17 00:00:00| 40.760067| -73.97952|   12|
|ccf7758a-155f-4eb   |           gaee|2020-03-17 15:00:00| 40.759586| -73.98214|    9|
|2f4bd30c-0a59-4da   |           gaee|2020-03-18 23:00:00| 42.693657| -73.80621|    7|
|2f4bd30c-0a59-4da   |           idxx|2020-03-17 19:00:00| 40.768757|-73.621605|    7|

и

table1.show()

+--------------------+---------------+-------------------+----------+----------+-----+
|          identifier|identifier_type|          timestamp|device_lat|device_lon|count|
+--------------------+---------------+-------------------+----------+----------+-----+
|ccf7758a-155f-4eb   |           gaee|2020-03-17 13:00:00| 40.764214| -73.98244|   15|
|ccf7758a-155f-4eb   |           gaee|2020-03-17 14:00:00| 40.761467| -73.98039|   17|
|ccf7758a-155f-4eb   |           gaee|2020-03-17 00:00:00| 40.760067| -73.97952|   13|
|ccf7758a-155f-4eb   |           gaee|2020-03-19 15:00:00| 40.759586| -73.98214|    9|
|2f4bd30c-0a59-4da   |           gaee|2020-03-18 23:00:00| 42.693657| -73.80621|    7|
|2f4bd30c-0a59-4da   |           idxx|2020-03-17 16:00:00| 40.768757|-73.621605|    7|

Я хотел бы объединить две таблицы и составить сумму на счет, если они совпадают Идентификатор появляется в то же время и имеет что-то вроде

table1.show()

+--------------------+---------------+-------------------+-----+
|          identifier|identifier_type|          timestamp|count|
+--------------------+---------------+-------------------+-----+
|ccf7758a-155f-4eb   |           gaee|2020-03-17 13:00:00|   34|
|ccf7758a-155f-4eb   |           gaee|2020-03-17 14:00:00|   31|
|ccf7758a-155f-4eb   |           gaee|2020-03-17 00:00:00|   25|
|ccf7758a-155f-4eb   |           gaee|2020-03-17 15:00:00|    9|
|ccf7758a-155f-4eb   |           gaee|2020-03-19 15:00:00|    9|
|2f4bd30c-0a59-4da   |           idxx|2020-03-18 23:00:00|   14|
|2f4bd30c-0a59-4da   |           idxx|2020-03-17 16:00:00|    7|
|2f4bd30c-0a59-4da   |           idxx|2020-03-17 19:00:00|    7|

1 Ответ

2 голосов
/ 24 марта 2020

Если таблицы имеют одинаковые столбцы, тогда проще UNION ALL их сначала

SELECT identifier, identifier_type, timestamp, SUM(count) as count
FROM (
  SELECT identifier, identifier_type, timestamp, count
  FROM table 
  UNION ALL
  SELECT identifier, identifier_type, timestamp, count
  FROM table1
)
GROUP BY identifier, identifier_type, timestamp

РЕДАКТИРОВАТЬ: на самом деле "одинаковые" столбцы не требуются, но они должны иметь столбцы identifier, identifier_type, timestamp, count совместимый по типам данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...