如何删除空值并将其设置为Postgresql中的10行?

问题描述 投票:1回答:1

我是Postgresql的新手。我有一张叫“ sales”的表。

create table sales
    (
        cust    varchar(20),
        prod    varchar(20),
        day integer,
        month   integer,
        year    integer,
        state   char(2),
        quant   integer
    )

insert into sales values ('Bloom', 'Pepsi', 2, 12, 2001, 'NY', 4232);
insert into sales values ('Knuth', 'Bread', 23, 5, 2005, 'PA', 4167);
insert into sales values ('Emily', 'Pepsi', 22, 1, 2006, 'CT', 4404);
insert into sales values ('Emily', 'Fruits', 11, 1, 2000, 'NJ', 4369);
insert into sales values ('Helen', 'Milk', 7, 11, 2006, 'CT', 210);
insert into sales values ('Emily', 'Soap', 2, 4, 2002, 'CT', 2549);

类似这样的东西:“表内容”“>

现在,我想找到“最有利”的月份(当时大部分产品售出)和每种产品的“最优惠”月份(售出的产品数量最少)。

结果应该是这样的:“期望的结果”

我输入了

SELECT
    prod product,
    MAX(CASE WHEN rn2 = 1 THEN month END) MOST_FAV_MO,

    MAX(CASE WHEN rn1 = 1 THEN month END) LEAST_FAV_MO
FROM (
    SELECT
        *,
        ROW_NUMBER() OVER(PARTITION BY prod ORDER BY quant ) rn1,
        ROW_NUMBER() OVER(PARTITION BY prod ORDER BY quant DESC) rn2
    FROM sales
) x
WHERE  rn1 = 1 or rn2 = 1
GROUP BY prod,quant;

然后每种产品都有空值,总共有20行:“当前结果”

所以我如何删除这些行中的空值并使行的总数为10(总共有10种不同的产品????

我是Postgresql的新手。我有一张叫“ sales”的桌子。创建表销售(cust varchar(20),prod varchar(20),day整数,month整数,year ...

postgresql join group-by union row-number
1个回答
0
投票

我想说GROUP BY子句应该是

GROUP BY prod
© www.soinside.com 2019 - 2024. All rights reserved.