将表按行分组排序,其中组按列组中的总和排序';s值-Postgresql

将表按行分组排序,其中组按列组中的总和排序';s值-Postgresql,sql,postgresql,sorting,Sql,Postgresql,Sorting,我怎样才能打开这张桌子: | User | ItemID | Quantity | TotalValue (ValueOfItem*Quantity) | | UserY | 1 | 1 | 15 | | UserX | 2 | 1 | 22 | | UserX | 3 | 1 |

我怎样才能打开这张桌子:

|  User  | ItemID | Quantity | TotalValue (ValueOfItem*Quantity)  |
| UserY  |      1 |        1 |                                 15 | 
| UserX  |      2 |        1 |                                 22 | 
| UserX  |      3 |        1 |                                  7 | 
| UserY  |      3 |        1 |                                  7 | 
| UserX  |      1 |        2 |                                 30 |
| UserY  |      2 |        1 |                                 22 |
|  User  | ItemID | Quantity | TotalValue (ValueOfItem*Quantity)  |    
| UserX  |      1 |        2 |                                 30 |
| UserX  |      2 |        1 |                                 22 |
| UserX  |      3 |        1 |                                  7 |
| UserY  |      1 |        1 |                                 15 |
| UserY  |      2 |        1 |                                 22 |
| UserY  |      3 |        1 |                                  7 |
在此表中:

|  User  | ItemID | Quantity | TotalValue (ValueOfItem*Quantity)  |
| UserY  |      1 |        1 |                                 15 | 
| UserX  |      2 |        1 |                                 22 | 
| UserX  |      3 |        1 |                                  7 | 
| UserY  |      3 |        1 |                                  7 | 
| UserX  |      1 |        2 |                                 30 |
| UserY  |      2 |        1 |                                 22 |
|  User  | ItemID | Quantity | TotalValue (ValueOfItem*Quantity)  |    
| UserX  |      1 |        2 |                                 30 |
| UserX  |      2 |        1 |                                 22 |
| UserX  |      3 |        1 |                                  7 |
| UserY  |      1 |        1 |                                 15 |
| UserY  |      2 |        1 |                                 22 |
| UserY  |      3 |        1 |                                  7 |
我需要:

  • 为了对用户进行分组,所以UserX行都在一起,UserY行都在一起
  • 在用户的行中,ItemID需要按升序排列,因此为1,2,3
  • 用户组需要按照用户的TotalValue总和的降序排列。
    • 例如,UserX高于UserY,因为(30+22+7)>(15+22+7)

您可以使用每个用户计算总和。您可以进一步将其用作订单标准

SELECT
    user,
    item_id,
    quantity,
    total_value
FROM (
    SELECT
        *,
        sum(total_value) OVER (PARTITION BY user) as user_sum
    FROM 
        mytable
)s
ORDER BY user_sum DESC, user, item_id

您的输入表有4/2条UserX/UserY记录,但预期的输出包含3/3。请修错桌子。