我想将我的订单设置为降序但是我的总行(将特定列中的所有数值相加)作为最后一行依次排序,这可能吗?
数据库是netezza,只有三列:ID,名称和收入,这是一个聚合列
这个小提琴是在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 |
你可以用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
对于两个查询都相同,否则您将获得意外结果。
一种方法是使用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;