基于该集合的另一个子集的元素,在SQLite中对一个集合的一个子集进行分组

时间:2009-11-04 01:22:30

标签: sql sqlite group-by

我有一个像这样的数据集

A       |  B      | C         | D        | E
-----------------------------------------------
1       |  Carrot | <null>    | a        | 111
2       |  Carrot | <null>    | b        | 222
3       |  Carrot | zzz       | c        | 333
4       |  Banana | <null>    | a        | 444
5       |  Banana | <null>    | b        | 555
6       |  Banana | <null>    | c        | 666
7       |  Grape  | <null>    | a        | 777
8       |  Grape  | <null>    | b        | 888
9       |  Grape  | zzz       | c        | 999
10      |  Carrot | <null>    | a        | 000
11      |  Carrot | <null>    | b        | AAA
12      |  Carrot | zzz       | c        | BBB

现在我要做的是总结E的值,其中D的值为b,但仅适用于B中C值为zzz的那些元素。所以在上面的例子中我看的是值222,888和AAA,但我对555不感兴趣。

我可以通过分组和基于值B的总和来解决这个问题,但我想做的是基于C的总和。

我的代码看起来像这样

select B,
       (select sum(E) as duty_payable
          from table table_alias_b
         where D = "b"
           and table_alias_b.B = table_alias_a.B )
  from table table_alias_a
 where table_alias_b.B in (select B
                            from table
                           where (C = 'zzz'))
group by B

或类似的东西(三个表中也有连接......)

这完全可以理解吗?

1 个答案:

答案 0 :(得分:1)

除非我遗漏了什么,否则这应该是你想要的:

  SELECT t.b_column,
         SUM(t.e_column)
    FROM TABLE t
   WHERE t.d_column = 'b'
     AND t.c_column = 'zzz'
GROUP BY t.b_column