db2会聚合,并且条件会给出重复的值和错误的数据

我有一个带有联接的简单查询,该联接正确返回了有关产品的信息:

select
            t1.category,t1.color,t1.size,t2.aisle

from infoTable t1

inner join locationTable t2 on t1.aisleNumber = t2.aisleNumber;

这将返回

category  |  color  |  size  |  aisle
--------------------------------------
A             Red       S        F12
B             Blue      M        G18
C             Green     L        H9
D             Yellow    XL       D19

到目前为止,很好。

现在,我想加入一个表,该表告诉我哪些商店有每种产品,以及每种产品有多少种。我正在另一张表的每个商店中手动检查这些产品,以确保我的数据准确无误。

select
            t1.category,t2.aisle,count(case when t3.storeNumber = 11 then 1 else 0 end) as storeNumber11
            count(case when t3.storeNumber = 31 then 1 else 0 end) as storeNumber31
            count(case when t3.storeNumber = 41 then 1 else 0 end) as storeNumber41

from infoTable t1

inner join locationTable t2 on t1.aisleNumber = t2.aisleNumber
inner join storetable t3    on t1.category = t3.category and t1.color = t3.color and t1.size = t3.size

group by t1.category,t3.storeNumber

我很接近,但是结果不正确。我明白了:

    category  |  color  |  size  |  aisle  |  storeNumber11 |  storeNumber31  |  storeNumber41
    --------------------------------------------------------------------------------------------
    A             Red       S        F12         17                 17                  17
    B             Blue      M        G18         12                 12                  12
    C             Green     L        H9          14                 14                  14
    D             Yellow    XL       D19         16                 16                  16

在手动检查第一行的storeNumber11应该有17个但对于31和41应该为零之后,我知道了一个事实。第二行的storeNumber11应该为零,而storeNumber31应该为12个。

所以我没有得到零,而只得到了相同的值,这一事实表明我显然有些不对劲。我会获得正确的行数和其他信息,但是,如果满足对t3的联接,我该如何解决此问题,以正确地仅对那些商店号进行计数?

taitan_winter 回答:db2会聚合,并且条件会给出重复的值和错误的数据

使用sum(),而不是count()

select
        t1.category,t1.color,t1.size,t2.aisle,sum(case when t3.storeNumber = 11 then 1 else 0 end) as storeNumber11
        sum(case when t3.storeNumber = 31 then 1 else 0 end) as storeNumber31
        sum(case when t3.storeNumber = 41 then 1 else 0 end) as storeNumber41
. . . 

count(<x>)计算非NULL值的数量。 0NULL一样非1

本文链接:https://www.f2er.com/2667458.html

大家都在问