sql语句
SELECT psl.PORT_ID,psl.SEC_ID,psl.market_value/pm.sum_net_amount AS WEIGHT,psl.market_value AS MKT_VAL,psl.TRADE_TYPE AS TYPE, pam.DEVIATION FROM port_shares_list AS psl
LEFT JOIN
(SELECT sum(net_amount) AS sum_net_amount FROM port_data WHERE port_id IN (SELECT port_id FROM port_list WHERE owner_id IN (SELECT id FROM auth_user WHERE compid = 7))
AND DATE='2021-04-06') AS pm ON pm.DATE='2021-04-06'
LEFT JOIN
port_config AS pc ON pc.PORT_ID=psl.PORT_ID AND TYPE='online' AND pc.MARKET IS NOT NULL
LEFT JOIN
port_analysis_mf AS pam ON pam.PORT_ID=psl.PORT_ID AND pam.DATE='2021-04-06' WHERE psl.port_id IN
(SELECT port_id FROM port_list WHERE owner_id IN (SELECT id FROM auth_user WHERE compid = 7))
AND psl.DATE = '2021-04-06' AND psl.TRADE_TYPE IN ('B','P','O','F','BS','S','CB','FD')
说明
psl:port_shares_list(主表)
pm:多表联查(port_data,port_list, auth_user)
pc:port_config
pam:port_analysis_mf
psl.market_value/pm.sum_net_amount AS WEIGHT:主表的market_value除以pm查询sum_net_amount值起别名为WEIGHT
第一个LEFT JOIN :从port_data表中查询sum(net_amount)数据,限定条件是port_id;
而port_id数据需要从port_list表中查询,而查询port_id需要限定owner_id条件,owner_id数据又需要从auth_user表中查询,
查询auth_user需要限定条件compid=7
第二个LEFT JOIN : 主要作用是限定条件,需要限制pc表的PORT_ID等于主表的PORT_ID,并且pc表的TYPE需要等于online和MARKET不为NULL
第三个LEFT JOIN : 从pam表中查询DEVIATION数据,和主表关联的限定条件是PORT_ID相等,然后pam表中的DATE=‘2021-04-06’, 在 主表PORT_ID为port_list,auth_user联表查询后的限制数据
然后主表的DATE还要等于’2021-04-06’和TRADE_TYPE在(‘B’,‘P’,‘O’,‘F’,‘BS’,‘S’,‘CB’,‘FD’)这些种类中