【问题标题】:Order by SUM, but do NOT aggregate the result set (order by subtotals)按 SUM 排序,但不聚合结果集(按小计排序)
【发布时间】:2014-06-30 19:23:45
【问题描述】:

我有下表

+--------+----------+--------+
| 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 是我主要关心的问题。

顺便说一句,性能在这里是一个大问题......

【问题讨论】:

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


    【解决方案1】:

    在大多数数据库中,您会使用窗口函数。 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;
    

    注意storeorder by 中。这处理了两个分数具有相同总数的情况。每个商店的所有行仍将在一起。

    【讨论】:

    • 这是处理这个问题的最好方法吗?我想避免加入,因为性能是一个大问题
    • 我认为您唯一的选择是显式连接(如答案所示)或使用相关子查询的隐式连接。
    猜你喜欢
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    相关资源
    最近更新 更多