【问题标题】:MySQL groupby with rollup and orderby based on aggregated columnMySQL group by 与汇总和 order by 基于聚合列
【发布时间】:2021-06-19 18:56:10
【问题描述】:

我正在尝试使用汇总对每个 customer_id 的金额进行分组,最后使用“总”金额进行分组

select ifnull(customer_id,'Total') as 'Customer_id'
 ,sum(amount) as 'Amount' 
  from payment 
 group 
    by customer_id with rollup 
 order 
    by customer_id = 'Total'
 , sum(amount) desc;

我已尝试按照answer 中的建议使用 customer_id = 'Total',但没有帮助。

我想根据 sum(amount) 值按升序对数据进行排序,但所有列的“Total”应该是最后一列。

Customer_id Amount
Total 65819.36
15 134.68
16 120.71
17 98.79
18 91.78
19 125.76
20 115.70
21 155.65
22 113.78
23 119.70

【问题讨论】:

  • 它似乎运作良好dbfiddle.uk/…
  • @nbk 操作员说他们最后要总数,您的演示首先要总数。

标签: mysql


【解决方案1】:

customer_id 用作别名以及它作为表中的列并没有帮助。

确定ORDER BY 是否正在检查ifnull() 之后的列名?也许它正在检查表中的customer_id,而不是您的计算?模棱两可。

为了明确起见,请始终引用源表中的列...

ORDER BY
    payment.customer_id IS NULL,
    SUM(payment.amount) DESC

更好的是,按照手册使用函数GROUPING()...

所以...

ORDER BY
    GROUPING(payment.customer_id),
    SUM(payment.amount) DESC

这能够区分NULL(或'TOTAL')恰好出现在数据中,而不是ROLLUP实际上是对一列进行分组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多