如何加入2个查询

时间:2015-04-16 02:57:17

标签: mysql sql

我有2个SQL查询:

SELECT accounts.assigned_user_id, jt0.user_name assigned_user_name,
SUM( IF(opp.opportunity_type='2', IFNULL(opp.amount,0), 0) ) AS amt_revenue,
SUM( IF(opp.opportunity_type='4', IFNULL(opp.amount,0), 0) ) AS amt_return
FROM accounts
LEFT JOIN users jt0
ON jt0.id=accounts.assigned_user_id AND jt0.deleted=0 AND jt0.deleted=0
LEFT JOIN accounts_opportunities AS a_o
ON a_o.account_id = accounts.id AND a_o.deleted=0
LEFT JOIN opportunities AS opp
ON (opp.id = a_o.opportunity_id AND opp.deleted=0 AND opp.sales_stage = 'Closed Won' AND opp.opportunity_type IN('2', '4'))
WHERE accounts.deleted=0
GROUP BY accounts.assigned_user_id, jt0.user_name
ORDER BY SUM(IFNULL(opp.amount,0)) DESC

SELECT accounts.assigned_user_id, 
SUM( IFNULL(accounts_collections.amount,0)) AS amount 
FROM accounts 
LEFT JOIN accounts_collections ON(accounts_collections.account_id = accounts.id AND accounts_collections.deleted=0) 
GROUP BY accounts.assigned_user_id

如何加入上述2个查询?

1 个答案:

答案 0 :(得分:1)

您可以将第二个查询放入子选择中。有两种方法可以做到这一点。在选择部分或表单部分。不确定哪个MySQL接受但是它们都适用于其他SQL引擎。

SELECT 
    accounts.assigned_user_id, 
    jt0.user_name assigned_user_name,
    SUM( IF(opp.opportunity_type='2', 
        IFNULL(opp.amount,0), 0) 
    ) AS amt_revenue,
    SUM( IF(opp.opportunity_type='4', 
        IFNULL(opp.amount,0), 0) 
    ) AS amt_return,
    (
        SELECT SUM( IFNULL(accounts_collections.amount,0)) AS amount 
        FROM accounts 
            LEFT JOIN accounts_collections ON(accounts_collections.account_id = accounts.id AND accounts_collections.deleted=0) 
        GROUP BY accounts.assigned_user_id
    ) AS amount
FROM accounts
    LEFT JOIN users jt0
        ON jt0.id=accounts.assigned_user_id AND jt0.deleted=0 AND jt0.deleted=0
    LEFT JOIN accounts_opportunities AS a_o
        ON a_o.account_id = accounts.id AND a_o.deleted=0
    LEFT JOIN opportunities AS opp
        ON (opp.id = a_o.opportunity_id AND opp.deleted=0 AND opp.sales_stage = 'Closed Won' AND opp.opportunity_type IN('2', '4'))
WHERE accounts.deleted=0
GROUP BY accounts.assigned_user_id, jt0.user_name
ORDER BY SUM(IFNULL(opp.amount,0)) DESC



SELECT 
    accounts.assigned_user_id, 
    jt0.user_name assigned_user_name,
    SUM( IF(opp.opportunity_type='2', 
        IFNULL(opp.amount,0), 0) 
    ) AS amt_revenue,
    SUM( IF(opp.opportunity_type='4', 
        IFNULL(opp.amount,0), 0) 
    ) AS amt_return,
    amount_tbl.amount
FROM accounts
    LEFT JOIN users jt0
        ON jt0.id=accounts.assigned_user_id AND jt0.deleted=0 AND jt0.deleted=0
    LEFT JOIN accounts_opportunities AS a_o
        ON a_o.account_id = accounts.id AND a_o.deleted=0
    LEFT JOIN opportunities AS opp
        ON (opp.id = a_o.opportunity_id AND opp.deleted=0 AND opp.sales_stage = 'Closed Won' AND opp.opportunity_type IN('2', '4'))
    JOIN (
        SELECT accounts.assigned_user_id,
            SUM( IFNULL(accounts_collections.amount,0)) AS amount 
        FROM accounts 
            LEFT JOIN accounts_collections ON(accounts_collections.account_id = accounts.id AND accounts_collections.deleted=0) 
        GROUP BY accounts.assigned_user_id
    ) AS amount_tbl ON (amount_tbl.assigned_user_id = accounts.assigned_user_id)
WHERE accounts.deleted=0
GROUP BY accounts.assigned_user_id, jt0.user_name
ORDER BY SUM(IFNULL(opp.amount,0)) DESC