按SUM排序,但不聚合结果集(按小计排序)

时间:2014-06-30 19:23:45

标签: sql group-by sql-order-by h2

我有下表

+--------+----------+--------+
| STORE  | PRODUCT  | AMOUNT |
+--------+----------+--------+
| store1 | product1 |    100 |
| store1 | product2 |     90 |
| store2 | product2 |     95 |
| store2 | product1 |     90 |
| store3 | product1 |    120 |
+--------+----------+--------+

事情是,我想按每家商店的金额来订购这张桌子。在这个例子中,store1有190,store2有185和store3 120.所以在这个例子上授予了订单,我也想按每个产品的数量订购,但是不想在“商店”范围之外得到这个“,并且不想分组,因为我需要显示所有行......

如何在H2数据库中实现此排序?我可以欣赏其他数据库,但H2是我的主要关注点。

不过,性能是一个很大的问题......

1 个答案:

答案 0 :(得分:2)

在大多数数据库中,您将使用窗口功能。 H2不支持它们。所以你需要做一个明确的连接:

select t.*
from table t join
     (select store, sum(amount) as totalamount
      from table t
      group by store
     ) ts
     on t.store = ts.store
order by ts.totalamount desc, ts.store;

请注意store位于order by。这处理两个分数具有相同总数的情况。每个商店的所有行仍然在一起。