postgresql - 如何删除空值并使其在 Postgresql 中达到 10 行?

标签 postgresql join group-by union row-number

我是 Postgresql 的新手。我有一个名为“销售”的表。

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);

是这样的: table content

现在我想找到“最优惠”的月份(当产品数量最多时 售出)和每种产品的“最差”月份(产品销售量最少时)。

结果应该是这样的: expected result

我进入了

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 行: current result

那么如何去除这些行中的空值并使总行数达到 10(总共有 10 个不同的产品)???

最佳答案

我会说 GROUP BY 子句应该是

GROUP BY prod

否则你会为每个不同的 quant 得到一行,这不是你想要的。

关于postgresql - 如何删除空值并使其在 Postgresql 中达到 10 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58278903/

相关文章:

mysql - MYSQL 中的内联 UPDATE 不起作用

MYSQL SELECT 最新条目和 JOIN 表,每个订单号包含多个项目

python - 将多个函数应用于多个 groupby 列

sql - 使用一列 Postgresql 的最大值更新选择

database - 在数据库中使用继承的优点和缺点是什么

mysql update + ( where + join) 语法

mysql - 在 MySql 中执行查询时与 only_full_group_by 相关的错误

php - MySQL查询排序/分组性能

java - 当某人实体日期字段与当前日期相比是过去时,如何自动更新实体字段?

postgresql - 删除 Windows 7 上的 postgres 用户帐户