SQL按最后一个总数降序排列

SQL按最后一个总数降序排列,sql,sql-order-by,netezza,Sql,Sql Order By,Netezza,我想将我的顺序设置为降序,但将我的总行(将特定列中的所有数值相加)作为最后一行作为序列中的最后一行,这可能吗 DB是netezza,只有三个列:ID、name和revenue,这是一个以聚合列开头的列您可以通过联合所有来实现这一点 SELECT column_A , column_B , ... {your query} UNION ALL SELECT '' as Column_A , SUM(column_B) as column_B,... {your totals query}

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


DB是netezza,只有三个列:ID、name和revenue,这是一个以聚合列开头的列

您可以通过
联合所有
来实现这一点

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

UNION ALL 

SELECT '' as Column_A , SUM(column_B) as column_B,... {your totals query}
column_B
在这种情况下,可以是您想要总计的数值列<代码>列_A是一个非数字列或任何您不需要总计的列。请注意,
{your totals query}
中选择的所有列
都应该是
聚合的
空的
,如果您希望它只返回一行

您还需要在两个查询中包含相同数量的列,以便
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 

保持两个查询的顺序相同,否则您将得到意外的结果。

此fiddle是在MySQL中创建的,但查询应在任何标准SQL中工作

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 |
主查询

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 |

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 |

一种方法是使用
分组集

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;

SQL的风格和版本是什么?不管怎样,您总是可以在子查询中设置该总数,然后根据子查询中的总和对外部查询进行排序。您的代码在哪里?您能告诉我们吗?实际上,由于大多数SQL风格都会在
选择
后按
排序,您应该能够在对列进行求和的别名上执行一个简单的
排序。此外,您可以提供一个示例,说明您开始使用的数据和预期结果吗?您不需要使用
联合所有
。这应该可以用一个简单的
总和(colA+colB+colC)
来完成。原文的措辞有点不清楚。听起来John想要一种类似于access table totals列的格式。其中,
Totals
将是附加到结果集末尾的一行,其中包含特定列的聚合值。Edward,很抱歉出现任何混淆,但您是正确的。我可以使用分组集创建总计行。我是按收入降序排序的(已经求和了),我希望总行位于底部,而不是顶部,因为它目前符合按语句降序的顺序。我已经更新了我的答案。我不确定Netezza
在后端运行的是什么,但如果它在2010年之前就存在,那么
sql server
就是一个不错的选择。如果是这种情况,那么您在执行此语法时应该没有问题。