对另一个查询返回的记录的列求和

时间:2015-10-16 20:11:46

标签: mysql sql

我想知道最好的方法是:

我有一个表voldata(vol_id, key_id, dte, volume),它将有数十万个条目。有数千个独特的key_id条目。每个key_id条目都有大约100个dte条目(即日期)。所以表格看起来像这样:

vol_id key_id dte volume
...
186303  K_DXNRTDZL  2013-09-01  2900
186304  K_DXNRTDZL  2013-10-01  4400
186305  K_DXNRTDZL  2013-11-01  4400
186306  K_DXNRTDZL  2013-12-01  4400
...
186433  K_WXDNKG3O  2014-03-01  8100
186434  K_WXDNKG3O  2014-04-01  8100
186435  K_WXDNKG3O  2014-05-01  6600
186436  K_WXDNKG3O  2014-06-01  8100
...
186338  K_X4TSU3RD  2014-01-01  5400
186339  K_X4TSU3RD  2014-02-01  6600
186340  K_X4TSU3RD  2014-03-01  8100
186341  K_X4TSU3RD  2014-04-01  8100

我有另一张桌子catkeydata(catkey_id, cat_id, key_id)。每个cat_id(类别)由可能数百个key_ids组成。所以这个表存储的数据如下:

catkey_id cat_id key_id
7305    C_B3ZRB0QR  K_DXNRTDZL
7306    C_B3ZRB0QR  K_X4TSU3RD
7307    C_B3ZRB0QR  K_G7TBKU83
7308    C_B3ZRB0QR  K_8X0L681N
7312    C_B3ZRB0QR  K_WXDNKG3O

即类别C_B3ZRB0QR由那里显示的5 key_ids组成。我希望能够在volume表中对给定日期和给定类别的voldata进行求和。因此,我会请求构成给定类别的key_ids的完整列表,然后我想要将特定日期的关键字的总和相加。

如果没有循环遍历该类别中的所有关键字,是否有简单/单行的方式?谢谢!

2 个答案:

答案 0 :(得分:0)

尝试类似

的内容
SELECT SUM(volume) FROM voldata INNER JOIN catkeydata ON 
voldata.key_id = catkeydata.key_id WHERE cat_id = ‘C_B3ZRB0QR’ 
AND dte = ‘2013-09-01’;

答案 1 :(得分:0)

还会引入没有孩子的类别并提供可见性。

$query = "SELECT c.CAT_ID, SUM(v.VOLUME) FROM CATKEYDATA AS c LEFT JOIN VOLDATA v ON c.KEY_ID = v.KEY_ID AND v.DATE = '2014-06-01'";