汇总条件列

时间:2019-06-05 14:53:57

标签: sql sql-server

我有以下数据集(有很多行):

        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')进行分组,并对行进行汇总

  • 其中一些使用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 :(得分:-1)

    SELECT
SKU, STORE, DATA,
    AVG(PRICE),
    SUM(QTD),
    MAX(FOR),
    MAX(DEV),
    FROM DT
    GROUP BY SKU, STORE, DATA

编辑。按照建议,我用AVG取代了MEAN(适用于我所知道的所有数据库提供程序)
如果要获取与最高日期相对应的FOR和DEV值,则可以复制此解决方案:
Select first row in each GROUP BY group?