Group by with calendar quarter as column
我希望我的表中一列的总和按日历季度分组。 更具体地说,我现在拥有的是每月我想要的列的总和:
1 2 3 4 5 6 7 8 | select month(emitido_date) as mes, year(emitido_date) as ano, ifnull(sum((det.preco * det.quantidade) * (iva.valor/100)),0) as totaliva from documento as doc inner join documento_serie as serie on serie.id = doc.documento_serie_id inner join documento_detail as det on doc.id = det.documento_id inner join phos_iva as iva on iva.id = det.iva_id where serie.documento_categoria_id = 2 or serie.documento_categoria_id = 3 group by mes, ano order by mes, ano desc |
上面的代码很好,适合我。 它按月返回我想要的组的总和。 例如:1月:100,2月:200,3月:300。直到12月。
我的问题是如何按日历季度分组。 具体来说,并寻找上面的例子,现在我想创建一个查询,它给我[1月,2月,3月] = 600,[4月,5月,6月],[7月,8月,9月]的值的总和 ],[十月,十一月,十二月]。 我尝试使用下面的代码但是我收到了一个错误:
1111 - invalid use of group function.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | select sum(case when month(emitido_date) in (1,2,3) then ifnull(sum(det.quantidade),0) else 0 end) as Tri1, sum(case when month(emitido_date) in (4,5,6) then ifnull(sum(det.quantidade),0) else 0 end) as Tri2, select sum(case when month(emitido_date) in (1,2,3) then ifnull(sum((det.preco * det.quantidade) * (iva.valor/100)),0) else 0 end) as Tri1, sum(case when month(emitido_date) in (4,5,6) then ifnull(sum((det.preco * det.quantidade) * (iva.valor/100)),0) else 0 end) as Tri2, sum(case when month(emitido_date) in (7,8,9) then ifnull(sum((det.preco * det.quantidade) * (iva.valor/100)),0) else 0 end) as Tri3, sum(case when month(emitido_date) in (10,11,12) then ifnull(sum((det.preco * det.quantidade) * (iva.valor/100)),0) else 0 end) as Tri4, year(emitido_date) as ano from documento as doc inner join documento_serie as serie on serie.id = doc.documento_serie_id inner join documento_detail as det on doc.id = det.documento_id inner join phos_iva as iva on iva.id = det.iva_id where serie.documento_categoria_id = 3 group by year(emitido_date) |
怎么了?
尝试
同样将
您无法嵌套聚合函数。 但你不需要。 我想你想要:
1 2 3 4 5 6 7 8 9 | select sum(case when month(emitido_date) in (1, 2,3 ) then det.quantidade else 0 end) as Tri1, sum(case when month(emitido_date) in (4, 5, 6) then det.quantidade else 0 end) as Tri2, sum(case when month(emitido_date) in (7, 8, 9) then det.quantidade else 0 end) as Tri3, sum(case when month(emitido_date) in (10, 11, 12) then det.quantidade else 0 end) as Tri4, year(emitido_date) as ano |