gpt4 book ai didi

mysql - 查询同一列上的两个总和

转载 作者:行者123 更新时间:2023-11-29 07:33:03 24 4
gpt4 key购买 nike

是否可以只创建一个在同一列上返回两个总和的查询?

我有:

总销售额

select month(emitido_date) as mes, ifnull(sum((det.preco * det.quantidade) * (iva.valor/100) + (det.preco * det.quantidade) - (det.preco * det.quantidade * (det.desconto/100))),0) as total
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 and doc.rascunho = false and doc.exercicio_id = 4
group by mes
order by mes

已结算销售额总额

select month(emitido_date) as mes, ifnull(sum((det.preco * det.quantidade) * (iva.valor/100) + (det.preco * det.quantidade) - (det.preco * det.quantidade * (det.desconto/100))),0) as total
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 and doc.rascunho = false and doc.exercicio_id = 4 and (serie.documento_tipo_id = 10 or serie.documento_tipo_id = 11 or serie.documento_tipo_id = 15)
group by mes
order by mes

第一个问题。我可能在同一个查询中返回一个带有 |Month| 的表总销售额 |已结算销售| ?

第二个问题。在第二个查询中,在 where 子句中,当字段 serie.documento_tipo_id 为 15 时,在 inner join 中表 documento_detail,字段应为 doc.source_id 而不是 doc.id。我该如何提出这个条件?

最佳答案

用例声明。尝试一下。

    select month(emitido_date) as mes, 
case when (serie.documento_tipo_id = 10 or serie.documento_tipo_id = 11 or serie.documento_tipo_id = 15)
then ifnull(sum((det.preco * det.quantidade) * (iva.valor/100) + (det.preco * det.quantidade) - (det.preco * det.quantidade * (det.desconto/100))),0)
end settledSales,
ifnull(sum((det.preco * det.quantidade) * (iva.valor/100) + (det.preco * det.quantidade) - (det.preco * det.quantidade * (det.desconto/100))),0) as totalSales
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 and doc.rascunho = false and doc.exercicio_id = 4
group by mes
order by mes

既然你提到当 serie.documento_tipo_id = 15 时内部联接是不同的..这是我的建议。我不确定这是否会给出您想要的结果,而且我担心它的性能可能很差..无论如何,我将其粘贴在这里。希望能帮助到你。 :)

select mes, sum(settledSales), sum(totalSales)
from
(select month(emitido_date) as mes,
case when (serie.documento_tipo_id = 10 or serie.documento_tipo_id = 11)
then ifnull(sum((det.preco * det.quantidade) * (iva.valor/100) + (det.preco * det.quantidade) - (det.preco * det.quantidade * (det.desconto/100))),0)
end settledSales,
ifnull(sum((det.preco * det.quantidade) * (iva.valor/100) + (det.preco * det.quantidade) - (det.preco * det.quantidade * (det.desconto/100))),0) as totalSales
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 and doc.rascunho = false and doc.exercicio_id = 4
and serie.documento_tipo_id <> 15
group by mes
UNION
select month(emitido_date) as mes,
ifnull(sum((det.preco * det.quantidade) * (iva.valor/100) + (det.preco * det.quantidade) - (det.preco * det.quantidade * (det.desconto/100))),0)
settledSales,
0 as totalSales
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.SOURCE_ID = det.documento_id
inner join phos_iva as iva on iva.id = det.iva_id
where serie.documento_categoria_id = 3 and doc.rascunho = false and doc.exercicio_id = 4
and serie.documento_tipo_id = 15
group by mes
order by mes
) detail
group by mes

干杯! :)

关于mysql - 查询同一列上的两个总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31937197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com