SQL упорядочить по убыванию общего количества в последний раз - PullRequest
0 голосов
/ 07 сентября 2018

Я бы хотел установить свой порядок по убыванию, но с моей итоговой строкой (суммирующей все числовые значения в определенном столбце) в качестве последней строки последней в последовательности, это возможно?

БД - это netezza, и есть только три столбца: ID, имя и доход, который является агрегированным столбцом, начинающимся с

Ответы [ 3 ]

0 голосов
/ 07 сентября 2018

Эта скрипка была создана в MySQL, но запрос должен работать в любом стандартном SQL.

SQL Fiddle

Настройка схемы MySQL 5.6 :

CREATE TABLE t1 ( id int, name varchar(10), revenue int ) ;

INSERT INTO t1 (id, name, revenue)
VALUES (1,'first',10), (2,'first',10), (3,'last',1), (4,'last',1) ;

Основной запрос :

SELECT name, sum(revenue) AS totalRevenue
FROM t1
GROUP BY name
ORDER BY totalRevenue DESC

Результаты

|  name | totalRevenue |
|-------|--------------|
| first |           20 |
|  last |            2 |
0 голосов
/ 07 сентября 2018

Один из подходов заключается в использовании grouping sets:

select id, name, sum(revenue)
from t
group by grouping sets ( (id, name), () )
order by (case when grouping(id) = 1 then 1 else 2 end) desc,
         sum(revenue) desc;
0 голосов
/ 07 сентября 2018

Вы можете сделать это с помощью UNION ALL.

SELECT column_A , column_B , ... {your query}

UNION ALL 

SELECT '' as Column_A , SUM(column_B) as column_B,... {your totals query}

column_B в этом случае может быть любой числовой столбец, для которого вы хотите получить итоговые значения. column_A - это не числовой столбец или любой столбец, для которого вы не хотите итого. Обратите внимание, что все столбцы selected в {your totals query} должны быть aggregated или NULL, если вы хотите, чтобы это возвращало только одну строку.

Вам также потребуется включить одинаковое количество столбцов в оба запроса, чтобы метод UNION работал правильно.

Если вы включите свой RMDB, то мы можем разработать более конкретное решение. UNION ALL - это синтаксис для SQL-Server.

- поэтому в ответ на ваш комментарий 9/6 звучит так, будто вы можете запустить команду offset fetch.

SELECT {your query} OFFSET 1 
UNION ALL 
SELECT {your query} OFFSET 0 FETCH NEXT 1 ROW ONLY 

Оставьте ORDER BY одинаковыми для обоих запросов, иначе вы получите неожиданные результаты.

...