Как я могу удалить нулевые значения и сделать его 10 строк в Postgresql? - PullRequest
1 голос
/ 08 октября 2019

Я новичок в 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 разных товаров) ???

1 Ответ

1 голос
/ 08 октября 2019

Я бы сказал, что предложение GROUP BY должно быть

GROUP BY prod

В противном случае вы получите одну строку на каждый quant, что не то, что вы хотите.

...