我想按降序设置顺序,但总行数(将特定列中的所有数值加起来)作为最后一行,这可能吗?
DB是netezza,只有三列:ID,名称和收入,是以
开头的汇总列答案 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}
应该是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
不变,否则您将得到意想不到的结果。
答案 1 :(得分:0)
此小提琴是在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
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;