Агрегирование столбцов с условиями - PullRequest
0 голосов
/ 05 июня 2019

У меня есть следующий набор данных (есть много строк):

        NUM     POS   SKU   STORE   FOR        DATE     PRICE   QTD DEV
1   93591601    10  37350   HC01    8740    2017-01-02  76.00   1.0 0.0
2   93591701    20  37350   HC01    8740    2017-01-02  83.49   1.0 0.0

3   93592369    20  37350   HC01    8740    2017-01-04  92.90   1.0 0.0
4   93592440    20  37350   HC01    8740    2017-01-04  88.85   1.0 0.0
5   93592697    20  37350   HC01    8740    2017-01-04  78.38   1.0 0.0

Я пытаюсь сгруппировать ('SKU', 'STORE', 'DATA') и Aggragateстроки

  • некоторые из них используют sum,

  • другие, вычисляя mean

  • другие сохранение последней строки группы .

В Python я могу сделать это с помощью этой функции:

df = df.groupby(['SKU', 'STORE', 'DATA']).agg({'PRICE': np.mean,
                                             'QTD':np.sum,
                                             'DEV':'last',
                                             'FOR':'last',
                                             }).reset_index()



        NUM     POS   SKU   STORE   FOR        DATE     PRICE   QTD DEV
1   93591601    10  37350   HC01    8740    2017-01-02  79.74   2.0 0.0
2   93591701    20  37350   HC01    8740    2017-01-04  86.71   3.0 0.0

Как я могу сделать это с помощью sql?

Предположим, что имя таблицы - DT:

SELECT 
MEAN(PRICE),
SUM(QTD)
FROM DT
GROUP BY 'SKU', 'STORE', 'DATA'

Как получить значение последней строки из каждой группы?

1 Ответ

0 голосов
/ 05 июня 2019
    SELECT
SKU, STORE, DATA,
    AVG(PRICE),
    SUM(QTD),
    MAX(FOR),
    MAX(DEV),
    FROM DT
    GROUP BY SKU, STORE, DATA

EDIT. Как было предложено, я заменил MEAN на AVG (работает для всех известных мне поставщиков баз данных)
Если вы хотите получить значения FOR и DEV, соответствующие наивысшей дате или что-то еще, вы можете повторить это решение:
Выбрать первую строку в каждой группе GROUP BY?

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