Как сделать заказ после накопительной, а не разделенной группировки? - PullRequest
0 голосов
/ 13 июня 2018

Я использую сведение, и я хочу упорядочить по лучшему году (по прибыли не в алфавитном порядке), а не по группам лет.
Каждый год упорядочен по лучшему продукту (по прибыли не в алфавитном порядке), а не разделить и т. Д..

Я хочу что-то вроде этого:

table1

Но у меня есть только это:

DROP TABLE IF EXISTS abc;
CREATE TABLE abc(year  text,
                      country text, product text, profit integer);

  INSERT INTO abc VALUES ('2016', 'USA', 'Phone', 3000);
  INSERT INTO abc VALUES ('2016', 'USA', 'TV', 1000);
  INSERT INTO abc VALUES ('2016', 'UK', 'TV', 2000);
  INSERT INTO abc VALUES ('2016', 'UK', 'Phone', 1000);
  INSERT INTO abc VALUES ('2015', 'USA', 'TV', 1500);
  INSERT INTO abc VALUES ('2015', 'USA', 'Phone', 1000);
  INSERT INTO abc VALUES ('2015', 'UK', 'Phone', 900);
  INSERT INTO abc VALUES ('2015', 'UK', 'TV', 600);
  INSERT INTO abc VALUES ('2014', 'USA', 'Phone', 1500);
  INSERT INTO abc VALUES ('2014', 'USA', 'TV', 1000);
  INSERT INTO abc VALUES ('2014', 'UK', 'Phone', 1500);
  INSERT INTO abc VALUES ('2014', 'UK', 'TV', 2000);

with data as
(
SELECT year, country, product, profit from abc
  )
 select l.year as year, l.country as country, l.product as product,
  sum(l.profit) as profit
 from data l 
group by rollup(year, country, product)
ORDER BY 
CASE WHEN year IS NULL THEN 1 ELSE 0 END, year

Когда я заказываю по сумме (л.profit) он разделен годами.

1 Ответ

0 голосов
/ 13 июня 2018

Добавить больше к заказу по пункту:

DROP TABLE IF EXISTS abc;
CREATE TABLE abc(year  text,
                  country text, product text, profit integer);

  INSERT INTO abc VALUES ('2016', 'USA', 'Phone', 3000);
  INSERT INTO abc VALUES ('2016', 'USA', 'TV', 1000);
  INSERT INTO abc VALUES ('2016', 'UK', 'TV', 2000);
  INSERT INTO abc VALUES ('2016', 'UK', 'Phone', 1000);
  INSERT INTO abc VALUES ('2015', 'USA', 'TV', 1500);
  INSERT INTO abc VALUES ('2015', 'USA', 'Phone', 1000);
  INSERT INTO abc VALUES ('2015', 'UK', 'Phone', 900);
  INSERT INTO abc VALUES ('2015', 'UK', 'TV', 600);
  INSERT INTO abc VALUES ('2014', 'USA', 'Phone', 1500);
  INSERT INTO abc VALUES ('2014', 'USA', 'TV', 1000);
  INSERT INTO abc VALUES ('2014', 'UK', 'Phone', 1500);
  INSERT INTO abc VALUES ('2014', 'UK', 'TV', 2000);

with data as
(
SELECT year, country, product, profit from abc
  )
 select l.year as year, l.country as country, l.product as product,
  sum(l.profit) as profit
 from data l 
group by rollup(year, country, product)
ORDER BY 
CASE WHEN year IS NULL THEN 1 ELSE 0 END,
year,
case when product is NULL THEN 1 else 0 end,
profit desc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...