PostgreSQL的条件和

时间:2018-08-08 15:23:29

标签: postgresql

我有一张表,其中包含以下销售和库存数据(哦):

category sales  oh  item_num
Clothes  12     10  1
Clothes  11     10  1
Clothes  10     10  1
Clothes  5      10  1
Clothes  8      10  1
Clothes  4      10  1
Clothes  23     10  2
Clothes  5      10  2
Clothes  20     10  2
Clothes  5      10  2
Clothes  13     10  2
Clothes  9      10  2
Food     6      25  3
Food     8      25  3
Food     7      25  3
Food     14     25  3

我正在尝试查询此表以按类别获取sales和oh列的总和:

SELECT category, SUM(sales) AS sales, SUM(oh) AS oh
FROM data
GROUP BY category

但是,问题是我需要SUM(oh)只对不同的项目求和,而SUM(sales)要对所有值求和。所以结果应该是:

category   sales   oh
Clothes     125    20
Food        35     25

我尝试了SUM(DISTINCT oh),但这仅适用于不同的oh值,而不适用于不同的项目。我真的需要像SUM(DISTINCT(item_num) oh)这样的东西。

我尝试了各种窗口功能,但无法提出解决方案。有人知道如何在唯一密钥上返回这种总和吗?

1 个答案:

答案 0 :(得分:1)

这就是我要做的:

INCLUDE

基本上分阶段解决问题。首先,将商品按类别和商品编号分组以获得销售总和,然后按类别将商品分组和总计以获得总和。

结果:

SELECT category, SUM(sales) AS sales, SUM(oh) AS oh
FROM (
    SELECT category, SUM(sales) AS sales, oh
    FROM data
    GROUP BY category, item_num, oh
) ttl
GROUP BY category;

编辑:包含的简化查询。