我的SQL查询SUM分组有什么问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的SQL查询SUM分组有什么问题相关的知识,希望对你有一定的参考价值。

您好我有一个SQL查询,它不计算我的一行。这被称为花费,你可以在小提琴中看到它。我的代码出了什么问题?我只需要基本表

Month  ID GOT SPEND
1      1  100 50
2      1  500 200
1      2  200 50

我创造了小提琴http://sqlfiddle.com/#!9/3623b1/2

请你帮助我好吗?

这是查询:

select 
    keliones_lapas.Vairuot_Id, 
    MONTH(keliones_lapas.Data_darbo), 
    sum(keliones_lapas.uzdarbis) as Got, 
    coalesce(Suma, 0) AS Spend, 
    (sum(keliones_lapas.uzdarbis) - coalesce(Suma, 0)) Total
from keliones_lapas
    left join (
        select Vairuotas, 
               MONTH(Data_islaidu) as Data_islaidu, 
               sum(Suma) as Suma 
   from islaidos 
   group by Vairuotas, MONTH(Data_islaidu)) islaidos 
   on keliones_lapas.Vairuot_Id = islaidos.Vairuotas 
   and MONTH(keliones_lapas.Data_darbo) = MONTH(islaidos.Data_islaidu)
group by keliones_lapas.Vairuot_Id, MONTH(keliones_lapas.Data_darbo), Suma
order by keliones_lapas.Vairuot_Id, MONTH(keliones_lapas.Data_darbo);
答案

尝试这个:你已经在你的子查询中已经使用了一个月,然后再次使用MONTH从连接中的月份检索,所以它返回NULL并且不匹配任何月份的keliones_lapas

SELECT 
    keliones_lapas.Vairuot_Id, 
    MONTH(keliones_lapas.Data_darbo), 
    SUM(keliones_lapas.uzdarbis) AS Got, 
    COALESCE(Suma, 0) AS Spend, 
    (SUM(keliones_lapas.uzdarbis) - COALESCE(Suma, 0)) Total
FROM keliones_lapas
    LEFT JOIN (
    SELECT Vairuotas, 
           MONTH(Data_islaidu) AS Data_islaidu, --It's already in MONTH
           SUM(Suma) AS Suma 
   FROM islaidos 
   GROUP BY Vairuotas, MONTH(Data_islaidu)) islaidos 
   ON keliones_lapas.Vairuot_Id = islaidos.Vairuotas 
   AND MONTH(keliones_lapas.Data_darbo) = Data_islaidu --No need to use MONTH or `vice versa`
GROUP BY keliones_lapas.Vairuot_Id, MONTH(keliones_lapas.Data_darbo), Suma
ORDER BY keliones_lapas.Vairuot_Id, MONTH(keliones_lapas.Data_darbo)

以上是关于我的SQL查询SUM分组有什么问题的主要内容,如果未能解决你的问题,请参考以下文章

查询分组中的 Oracle SQL 条件聚合函数

c#sqlserver在啥情况下使用到groupby进行分组查询

新列的 SQL 不同分组依据

MySQL 怎样分组查询

SQL分组查询

我想在数据库中的一个表中查询出全部数据 并且按照一个分组和排序