我有以下数据集(有很多行):
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'
如何从每个组中获取最后一行的值?
答案 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?