mysql—计算集合中“保留”项的sql查询

ctehm74n  于 2021-07-26  发布在  Java
关注(0)|答案(0)|浏览(229)

我们正在为名为readoutprobes和readoutprobekits的项目创建一个库存系统。请参见下面的模式。

readoutprobekit是一个预定义的1个或多个readoutprobes的集合。在工具箱中,特定类型的readoutprobe只能出现一次。
readoutprobe的库存由readoutprobe\u容器表跟踪,该表监视容器卷。
readoutprobekit的库存由readoutprobekit\u容器表跟踪。但是,readoutprobe工具包不跟踪物理readoutprobe容器。相反,它假设一个物理readoutkit是使用一组预定义的readoutprobe正确地“组装”起来的。
对于特定的readoutprobe,直接从readoutprobe\u container表获取卷大于0的物理readoutprobe容器的计数,对于工具包也是如此
但是,我们希望为每个readoutprobe获得一个“reserved count”编号,反映确实存在并且确实包含特定readoutprobe的工具包。
例如,假设我们有一个readoutprobe,名为a,计数为42。现在,在创建包含名为a的readoutprobe的特定readoutprobe工具包时,我们希望readoutprobe a的“reserved”计数为1。
但是,如果有一种方法可以添加到readoutprobes及其库存的查询中,那就更好了。
readoutprobes的“主查询”如下所示:

SELECT readoutprobes.*,     
    v.total_volume,
    stock_containers.stock_count,
    aliquots.aliquots_count
FROM readoutprobes
LEFT JOIN (
    SELECT p.id, COUNT(*) stock_count, stock_containers.readoutprobe_id
    FROM  readoutprobes AS p, readoutprobe_containers AS stock_containers
    WHERE p.id = stock_containers.readoutprobe_id AND stock_containers.volume > 0 AND stock_containers.parent_container IS NULL 
    GROUP BY p.id
    ) AS stock_containers
    ON stock_containers.readoutprobe_id = readoutprobes.id        
LEFT JOIN (
    SELECT p.id, COUNT(*) aliquots_count, aliquot_containers.readoutprobe_id
    FROM  readoutprobes AS p, readoutprobe_containers AS aliquot_containers
    WHERE p.id = aliquot_containers.readoutprobe_id AND aliquot_containers.volume > 0 AND aliquot_containers.parent_container IS NOT NULL
    GROUP BY p.id
    ) AS aliquots    
    ON aliquots.readoutprobe_id = readoutprobes.id        
LEFT JOIN (
    SELECT readoutprobes.id, COALESCE(SUM(pt.volume),0) total_volume
    FROM readoutprobes, readoutprobe_containers AS pt
    WHERE readoutprobes.id = pt.readoutprobe_id
    GROUP BY readoutprobes.id
    ) AS v
    ON readoutprobes.id = v.id
GROUP BY readoutprobes.id    
ORDER BY readoutprobes.id;

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题