我想知道最好的方法是:
我有一个表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
的完整列表,然后我想要将特定日期的关键字的总和相加。
如果没有循环遍历该类别中的所有关键字,是否有简单/单行的方式?谢谢!
答案 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'";