Как агрегировать данные по нескольким столбцам? - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть таблица, содержащая необработанные данные, которая выглядит следующим образом:

geoid  business
-------------------
1      BestBuy
1      WalMart
1      Target
2      BestBuy
2      Target
2      BestBuy
3      WalMart

Эти предприятия отображаются в столбцы в другой таблице следующим образом:

BestBuy -> BigBox_1
Walmart -> BigBox_2
Target  -> BigBox_3

Я пытаюсь найтичистый способ запроса таблицы необработанных данных и заполнения таблицы назначения, которая должна представлять одни и те же данные, например:

geoid BigBox_1_Count  BigBox_2_Count   BigBox_3_Count
----------------------------------------------------------
1    |            1  |              1 |                1
2    |            2  |              0 |                1
3    |            0  |              0 |                1   

Я понимаю, что могу сделать это с тремя различными запросами, например так:

INSERT INTO destTable (geoid, BigBox_1_Count)
SELECT geoid, COUNT(*) WHERE business = 'BestBuy'

и затем обновить оператор для двух других.

Но мне интересно, есть ли способ, которым я мог бы вставить все значения в соответствующий столбец с помощью одного оператора вставки?Можно ли это сделать?

Примечание. Я понимаю, что эта структура таблицы не идеальна.Я не создавал его, и его редизайн находится в моем списке дел, но сейчас мне нужно работать с тем, что у меня есть.

1 Ответ

0 голосов
/ 12 ноября 2018

Я бы сделал агрегацию:

INSERT INTO destTable (geoid, BigBox_1_Count, . . . )
     SELECT geoid, 
            SUM(CASE WHEN business = 'BestBuy' THEN 1 ELSE 0 END) AS BigBox_1_Count,
            SUM(CASE WHEN business = 'WalMart' THEN 1 ELSE 0 END) AS BigBox_2_Count,
            SUM(CASE WHEN business = 'Target' THEN 1 ELSE 0 END) AS BigBox_3_Count
     FROM table t
     GROUP BY geoid;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...