SQL顺序按降序总计最后一次

问题描述 投票:0回答:3

我想将我的订单设置为降序但是我的总行(将特定列中的所有数值相加)作为最后一行依次排序,这可能吗?

数据库是netezza,只有三列:ID,名称和收入,这是一个聚合列

sql sql-order-by netezza
3个回答
0
投票

这个小提琴是在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

Results

|  name | totalRevenue |
|-------|--------------|
| first |           20 |
|  last |            2 |

0
投票

你可以用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}都应该是aggregatedNULL,如果您希望它只返回一行。

您还需要在两个查询中包含相同数量的列,以使UNION方法正常工作。

如果你包括你的RMDB,那么我们可以定制一个更具体的解决方案。 UNION ALLSQL-Server的语法。

- 所以为了回应你的评论9/6,听起来你可以运行offset fetch命令。

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

保持ORDER BY对于两个查询都相同,否则您将获得意外结果。


0
投票

一种方法是使用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;
© www.soinside.com 2019 - 2024. All rights reserved.