SQL顺序按总末降序

时间:2018-09-06 21:13:28

标签: sql sql-order-by netezza

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

DB是netezza,只有三列:ID,名称和收入,是以

开头的汇总列

3 个答案:

答案 0 :(得分: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不变,否则您将得到意想不到的结果。

答案 1 :(得分: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 |

答案 2 :(得分: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;