【问题标题】:Sqllite sum () returns wrong value while join Second TableSqlite sum() 在加入第二个表时返回错误值
【发布时间】:2019-01-24 05:36:12
【问题描述】:

我正在尝试计算两个表中两列的总和,按日期分组并将两个表连接在一起

查询 1

select 
    Dates
    , ifnull( sum(Amount),0) As ETA 
from 
    Expence as t1 
where 
    t1.Dates IN (
        select distinct Dates As A from ( 
            select 
                Expence.Dates 
            from
                Expence 

            union all 

            select 
                Pass.Dates 
            from
                Pass 
                left join Expence 
                    on Pass.Dates=Expence.Dates
        )
    ) 
group by 
    dates

查询 2

select 
    Dates
    , ifnull( sum(Paid),0) As PTP
    , ifnull( sum(TotalAmount),0) As PTA 
from 
    pass As t2 
where 
    t2.Dates IN (
        select distinct 
            Dates As A 
        from ( 
            select 
                Expence.Dates 
            from 
                Expence 

            union all 

            select 
                Pass.Dates 
            from 
                Pass 
                left join Expence 
                    on Pass.Dates=Expence.Dates
        )
    ) 
group by 
    dates

两个查询独立工作,但连接在一起时返回错误答案。

select distinct 
    t.Dates
    ,PTP
    ,PTA
    ,ETA 
from (
    select 
        Dates
        , ifnull( sum(Paid),0) As PTP
        , ifnull( sum(TotalAmount),0) As PTA 
    from 
        pass As t2 
    where 
        t2.Dates IN (
            select distinct 
                Dates As A 
            from( 
                select 
                    Expence.Dates 
                from 
                    Expence 

                    union all 

                select 
                    Pass.Dates 
                from 
                    Pass 
                    left join Expence 
                        on Pass.Dates=Expence.Dates
            )
        ) 
    group by dates
) AS t
, (
    select 
        Dates
        ,ifnull( sum(Amount),0) As ETA 
    from 
        Expence as t1 
    where 
        t1.Dates IN (
            select distinct 
                Dates As A from ( 
                    select 
                        Expence.Dates 
                    from Expence 

                    union all
                        select 
                            Pass.Dates 
                        from 
                            Pass 
                            left join Expence 
                                on Pass.Dates=Expence.Dates
                )
        ) 
    group by dates
) AS P

【问题讨论】:

    标签: sql sqlite


    【解决方案1】:

    您得到的结果不正确,因为您编写的查询是无意义的。

    您的from 子句来自您声明的两个derived tables。因为您没有声明任何连接逻辑,所以 sqlite 假设为 natural join。这意味着对于引入的每一列(对于两个表),它都会检查每一行中的匹配项。

    由于这些查询似乎彼此之间几乎没有任何关系,因此您通常不会在匹配记录方面遇到太多问题。

    我对您的数据知之甚少,因此除了“单独运行它们”之外,提供更好的建议将很困难。我的假设是您希望将on t.Dates = P.Dates 添加到您的联接语句的末尾。

    【讨论】:

    • @Donkkas:如果解决的方法帮助或解决了您的问题,请酌情投票/接受答案。
    【解决方案2】:
    select distinct tdate AS `DATE`,PTA AS `TOTAL AMOUNT` ,PTP AS `TOTAL PAID`,ETA AS `TOTAL EXPENCE`, PTA -PTP  AS `BALANCE` from((
    select Dates As tdate,ifnull( sum(Paid),0) As PTP, ifnull( sum(TotalAmount),0) As PTA from pass As t2 where t2.Dates IN  (select distinct Dates As A from( select Expence.Dates from Expence union all select Pass.Dates from Pass left join Expence on Pass.Dates=Expence.Dates))
     group by dates)AS t left join
    (
    
    (select Dates as pdate,ifnull( sum(Amount),0) As ETA from Expence as t1 where t1.Dates IN  (select distinct Dates As A from( select Expence.Dates from Expence union all select Pass.Dates from Pass left join Expence on Pass.Dates=Expence.Dates))  group by dates 
    
    )AS p)  ON   tdate=pdate) where tdate between '24-01-2019' AND '25-01-2019'
    

    【讨论】:

      猜你喜欢
      • 2017-07-30
      • 1970-01-01
      • 2020-03-25
      • 1970-01-01
      • 2014-12-17
      • 1970-01-01
      • 2013-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多