Mysql 将子查询列添加到复杂的select查询

Mysql 将子查询列添加到复杂的select查询,mysql,sql,Mysql,Sql,我有以下疑问: (SELECT phppos_sales.sale_id as sale_id, (item_unit_price*quantity_purchased-item_unit_price*quantity_purchased*discount_percent/100)+(item_unit_price*quantity_purchased-item_unit_price*quantity_purchased*discount_percent/100)*(SUM(CASE WHEN

我有以下疑问:

(SELECT phppos_sales.sale_id as sale_id, (item_unit_price*quantity_purchased-item_unit_price*quantity_purchased*discount_percent/100)+(item_unit_price*quantity_purchased-item_unit_price*quantity_purchased*discount_percent/100)*(SUM(CASE WHEN cumulative != 1 THEN percent ELSE 0 END)/100) +(((item_unit_price*quantity_purchased-item_unit_price*quantity_purchased*discount_percent/100)*(SUM(CASE WHEN cumulative != 1 THEN percent ELSE 0 END)/100) + (item_unit_price*quantity_purchased-item_unit_price*quantity_purchased*discount_percent/100)) *(SUM(CASE WHEN cumulative = 1 THEN percent ELSE 0 END))/100) as total 

FROM phppos_sales_items
INNER JOIN phppos_sales ON phppos_sales_items.sale_id=phppos_sales.sale_id 
INNER JOIN phppos_items ON phppos_sales_items.item_id=phppos_items.item_id 
LEFT OUTER JOIN phppos_sales_items_taxes ON phppos_sales_items.sale_id=phppos_sales_items_taxes.sale_id and phppos_sales_items.item_id=phppos_sales_items_taxes.item_id and phppos_sales_items.line=phppos_sales_items_taxes.line 

WHERE sale_time BETWEEN "2014-08-01 00:00:00" and "2014-08-09 23:59:59" 

GROUP BY phppos_sales.sale_id, phppos_sales_items.item_id, phppos_sales_items.line) 
示例结果:

| sale_id | total                              |
+---------+------------------------------------+
|    3863 | 172.778400000000000000000000000000 |
|    3863 | 362.815200000000000000000000000000 |
|    3863 | 129.578400000000000000000000000000 |
|    3863 | 215.973000000000000000000000000000 |
|    3863 | 615.519000000000000000000000000000 |
+---------+------------------------------------+
我想为每次销售添加第三列付款金额。要查找付款金额,执行以下查询

SELECT SUM(payment_amount) from phppos_sales_payments WHERE sale_id = XXX;

有没有办法在1查询中执行此操作?

尝试运行以下代码:

SELECT phppos_sales.sale_id as sale_id, 
(item_unit_price*quantity_purchased-item_unit_price*quantity_purchased*discount_percent/100)+
(item_unit_price*quantity_purchased-item_unit_price*quantity_purchased*discount_percent/100)*
(SUM(CASE WHEN cumulative != 1 THEN percent ELSE 0 END)/100) +
(((item_unit_price*quantity_purchased-item_unit_price*quantity_purchased*discount_percent/100)*
(SUM(CASE WHEN cumulative != 1 THEN percent ELSE 0 END)/100) + 
(item_unit_price*quantity_purchased-item_unit_price*quantity_purchased*discount_percent/100)) 
*(SUM(CASE WHEN cumulative = 1 THEN percent ELSE 0 END))/100) as total, a.Sum 

FROM phppos_sales_items
INNER JOIN phppos_sales ON phppos_sales_items.sale_id=phppos_sales.sale_id 
INNER JOIN phppos_items ON phppos_sales_items.item_id=phppos_items.item_id 
LEFT OUTER JOIN phppos_sales_items_taxes ON phppos_sales_items.sale_id=phppos_sales_items_taxes.sale_id 
and phppos_sales_items.item_id=phppos_sales_items_taxes.item_id and phppos_sales_items.line=phppos_sales_items_taxes.line 
INNER JOIN (SELECT sale_id, SUM(payment_amount) Sum from phppos_sales_payments GROUP BY sale_id)a ON a.sale_id = phppos_sales.sale_id

WHERE sale_time BETWEEN "2014-08-01 00:00:00" and "2014-08-09 23:59:59" 

GROUP BY phppos_sales.sale_id, phppos_sales_items.item_id, phppos_sales_items.line

请尝试运行以下代码:

SELECT phppos_sales.sale_id as sale_id, 
(item_unit_price*quantity_purchased-item_unit_price*quantity_purchased*discount_percent/100)+
(item_unit_price*quantity_purchased-item_unit_price*quantity_purchased*discount_percent/100)*
(SUM(CASE WHEN cumulative != 1 THEN percent ELSE 0 END)/100) +
(((item_unit_price*quantity_purchased-item_unit_price*quantity_purchased*discount_percent/100)*
(SUM(CASE WHEN cumulative != 1 THEN percent ELSE 0 END)/100) + 
(item_unit_price*quantity_purchased-item_unit_price*quantity_purchased*discount_percent/100)) 
*(SUM(CASE WHEN cumulative = 1 THEN percent ELSE 0 END))/100) as total, a.Sum 

FROM phppos_sales_items
INNER JOIN phppos_sales ON phppos_sales_items.sale_id=phppos_sales.sale_id 
INNER JOIN phppos_items ON phppos_sales_items.item_id=phppos_items.item_id 
LEFT OUTER JOIN phppos_sales_items_taxes ON phppos_sales_items.sale_id=phppos_sales_items_taxes.sale_id 
and phppos_sales_items.item_id=phppos_sales_items_taxes.item_id and phppos_sales_items.line=phppos_sales_items_taxes.line 
INNER JOIN (SELECT sale_id, SUM(payment_amount) Sum from phppos_sales_payments GROUP BY sale_id)a ON a.sale_id = phppos_sales.sale_id

WHERE sale_time BETWEEN "2014-08-01 00:00:00" and "2014-08-09 23:59:59" 

GROUP BY phppos_sales.sale_id, phppos_sales_items.item_id, phppos_sales_items.line

请尝试运行以下代码:

SELECT phppos_sales.sale_id as sale_id, 
(item_unit_price*quantity_purchased-item_unit_price*quantity_purchased*discount_percent/100)+
(item_unit_price*quantity_purchased-item_unit_price*quantity_purchased*discount_percent/100)*
(SUM(CASE WHEN cumulative != 1 THEN percent ELSE 0 END)/100) +
(((item_unit_price*quantity_purchased-item_unit_price*quantity_purchased*discount_percent/100)*
(SUM(CASE WHEN cumulative != 1 THEN percent ELSE 0 END)/100) + 
(item_unit_price*quantity_purchased-item_unit_price*quantity_purchased*discount_percent/100)) 
*(SUM(CASE WHEN cumulative = 1 THEN percent ELSE 0 END))/100) as total, a.Sum 

FROM phppos_sales_items
INNER JOIN phppos_sales ON phppos_sales_items.sale_id=phppos_sales.sale_id 
INNER JOIN phppos_items ON phppos_sales_items.item_id=phppos_items.item_id 
LEFT OUTER JOIN phppos_sales_items_taxes ON phppos_sales_items.sale_id=phppos_sales_items_taxes.sale_id 
and phppos_sales_items.item_id=phppos_sales_items_taxes.item_id and phppos_sales_items.line=phppos_sales_items_taxes.line 
INNER JOIN (SELECT sale_id, SUM(payment_amount) Sum from phppos_sales_payments GROUP BY sale_id)a ON a.sale_id = phppos_sales.sale_id

WHERE sale_time BETWEEN "2014-08-01 00:00:00" and "2014-08-09 23:59:59" 

GROUP BY phppos_sales.sale_id, phppos_sales_items.item_id, phppos_sales_items.line

请尝试运行以下代码:

SELECT phppos_sales.sale_id as sale_id, 
(item_unit_price*quantity_purchased-item_unit_price*quantity_purchased*discount_percent/100)+
(item_unit_price*quantity_purchased-item_unit_price*quantity_purchased*discount_percent/100)*
(SUM(CASE WHEN cumulative != 1 THEN percent ELSE 0 END)/100) +
(((item_unit_price*quantity_purchased-item_unit_price*quantity_purchased*discount_percent/100)*
(SUM(CASE WHEN cumulative != 1 THEN percent ELSE 0 END)/100) + 
(item_unit_price*quantity_purchased-item_unit_price*quantity_purchased*discount_percent/100)) 
*(SUM(CASE WHEN cumulative = 1 THEN percent ELSE 0 END))/100) as total, a.Sum 

FROM phppos_sales_items
INNER JOIN phppos_sales ON phppos_sales_items.sale_id=phppos_sales.sale_id 
INNER JOIN phppos_items ON phppos_sales_items.item_id=phppos_items.item_id 
LEFT OUTER JOIN phppos_sales_items_taxes ON phppos_sales_items.sale_id=phppos_sales_items_taxes.sale_id 
and phppos_sales_items.item_id=phppos_sales_items_taxes.item_id and phppos_sales_items.line=phppos_sales_items_taxes.line 
INNER JOIN (SELECT sale_id, SUM(payment_amount) Sum from phppos_sales_payments GROUP BY sale_id)a ON a.sale_id = phppos_sales.sale_id

WHERE sale_time BETWEEN "2014-08-01 00:00:00" and "2014-08-09 23:59:59" 

GROUP BY phppos_sales.sale_id, phppos_sales_items.item_id, phppos_sales_items.line

只需将此添加到查询中

在选择部分中添加
temp.summated\u amount

添加到联接的

LEFT JOIN
(   SELECT
        SUM(payment_amount) as summed_amount,
        sale_id 
    FROM phppos_sales_payments 
) temp on temp.sale_id = phppos_sales.sale_id;
注 您应该尝试格式化您的查询,因为目前基本上无法读取

因此,您的查询应该在这行中找到一些内容

SELECT 
    phppos_sales.sale_id as sale_id, 
    (   item_unit_price * quantity_purchased-item_unit_price * quantity_purchased * discount_percent / 100
    ) +
    (   item_unit_price * quantity_purchased-item_unit_price * quantity_purchased * discount_percent / 100
    ) *
    (   SUM
        (   CASE WHEN cumulative != 1 THEN percent ELSE 0 END
        ) / 100
    ) +
    (
        (
            (   item_unit_price * quantity_purchased-item_unit_price * quantity_purchased * discount_percent / 100
            ) *
            (   SUM
                (CASE WHEN cumulative != 1 THEN percent ELSE 0 END) / 100
                ) + 
                (   item_unit_price * quantity_purchased-item_unit_price * quantity_purchased * discount_percent / 100
                )
            ) *
            (   SUM
                (CASE WHEN cumulative = 1 THEN percent ELSE 0 END)
            ) / 100
        ) as total, 
    temp.summed_amount
FROM phppos_sales_items
INNER JOIN phppos_sales 
    ON phppos_sales_items.sale_id=phppos_sales.sale_id 
INNER JOIN phppos_items 
    ON phppos_sales_items.item_id=phppos_items.item_id 
LEFT OUTER JOIN phppos_sales_items_taxes 
    ON phppos_sales_items.sale_id=phppos_sales_items_taxes.sale_id 
    AND phppos_sales_items.item_id=phppos_sales_items_taxes.item_id 
    AND phppos_sales_items.line=phppos_sales_items_taxes.line 
LEFT JOIN
    (   SELECT
            SUM(payment_amount) as summed_amount,
            sale_id 
        FROM phppos_sales_payments 
    ) temp on temp.sale_id = phppos_sales.sale_id;
WHERE sale_time BETWEEN "2014-08-01 00:00:00" AND "2014-08-09 23:59:59" 
GROUP BY 
    phppos_sales.sale_id, 
    phppos_sales_items.item_id, 
    phppos_sales_items.line 

只需将此添加到查询中

在选择部分中添加
temp.summated\u amount

添加到联接的

LEFT JOIN
(   SELECT
        SUM(payment_amount) as summed_amount,
        sale_id 
    FROM phppos_sales_payments 
) temp on temp.sale_id = phppos_sales.sale_id;
注 您应该尝试格式化您的查询,因为目前基本上无法读取

因此,您的查询应该在这行中找到一些内容

SELECT 
    phppos_sales.sale_id as sale_id, 
    (   item_unit_price * quantity_purchased-item_unit_price * quantity_purchased * discount_percent / 100
    ) +
    (   item_unit_price * quantity_purchased-item_unit_price * quantity_purchased * discount_percent / 100
    ) *
    (   SUM
        (   CASE WHEN cumulative != 1 THEN percent ELSE 0 END
        ) / 100
    ) +
    (
        (
            (   item_unit_price * quantity_purchased-item_unit_price * quantity_purchased * discount_percent / 100
            ) *
            (   SUM
                (CASE WHEN cumulative != 1 THEN percent ELSE 0 END) / 100
                ) + 
                (   item_unit_price * quantity_purchased-item_unit_price * quantity_purchased * discount_percent / 100
                )
            ) *
            (   SUM
                (CASE WHEN cumulative = 1 THEN percent ELSE 0 END)
            ) / 100
        ) as total, 
    temp.summed_amount
FROM phppos_sales_items
INNER JOIN phppos_sales 
    ON phppos_sales_items.sale_id=phppos_sales.sale_id 
INNER JOIN phppos_items 
    ON phppos_sales_items.item_id=phppos_items.item_id 
LEFT OUTER JOIN phppos_sales_items_taxes 
    ON phppos_sales_items.sale_id=phppos_sales_items_taxes.sale_id 
    AND phppos_sales_items.item_id=phppos_sales_items_taxes.item_id 
    AND phppos_sales_items.line=phppos_sales_items_taxes.line 
LEFT JOIN
    (   SELECT
            SUM(payment_amount) as summed_amount,
            sale_id 
        FROM phppos_sales_payments 
    ) temp on temp.sale_id = phppos_sales.sale_id;
WHERE sale_time BETWEEN "2014-08-01 00:00:00" AND "2014-08-09 23:59:59" 
GROUP BY 
    phppos_sales.sale_id, 
    phppos_sales_items.item_id, 
    phppos_sales_items.line 

只需将此添加到查询中

在选择部分中添加
temp.summated\u amount

添加到联接的

LEFT JOIN
(   SELECT
        SUM(payment_amount) as summed_amount,
        sale_id 
    FROM phppos_sales_payments 
) temp on temp.sale_id = phppos_sales.sale_id;
注 您应该尝试格式化您的查询,因为目前基本上无法读取

因此,您的查询应该在这行中找到一些内容

SELECT 
    phppos_sales.sale_id as sale_id, 
    (   item_unit_price * quantity_purchased-item_unit_price * quantity_purchased * discount_percent / 100
    ) +
    (   item_unit_price * quantity_purchased-item_unit_price * quantity_purchased * discount_percent / 100
    ) *
    (   SUM
        (   CASE WHEN cumulative != 1 THEN percent ELSE 0 END
        ) / 100
    ) +
    (
        (
            (   item_unit_price * quantity_purchased-item_unit_price * quantity_purchased * discount_percent / 100
            ) *
            (   SUM
                (CASE WHEN cumulative != 1 THEN percent ELSE 0 END) / 100
                ) + 
                (   item_unit_price * quantity_purchased-item_unit_price * quantity_purchased * discount_percent / 100
                )
            ) *
            (   SUM
                (CASE WHEN cumulative = 1 THEN percent ELSE 0 END)
            ) / 100
        ) as total, 
    temp.summed_amount
FROM phppos_sales_items
INNER JOIN phppos_sales 
    ON phppos_sales_items.sale_id=phppos_sales.sale_id 
INNER JOIN phppos_items 
    ON phppos_sales_items.item_id=phppos_items.item_id 
LEFT OUTER JOIN phppos_sales_items_taxes 
    ON phppos_sales_items.sale_id=phppos_sales_items_taxes.sale_id 
    AND phppos_sales_items.item_id=phppos_sales_items_taxes.item_id 
    AND phppos_sales_items.line=phppos_sales_items_taxes.line 
LEFT JOIN
    (   SELECT
            SUM(payment_amount) as summed_amount,
            sale_id 
        FROM phppos_sales_payments 
    ) temp on temp.sale_id = phppos_sales.sale_id;
WHERE sale_time BETWEEN "2014-08-01 00:00:00" AND "2014-08-09 23:59:59" 
GROUP BY 
    phppos_sales.sale_id, 
    phppos_sales_items.item_id, 
    phppos_sales_items.line 

只需将此添加到查询中

在选择部分中添加
temp.summated\u amount

添加到联接的

LEFT JOIN
(   SELECT
        SUM(payment_amount) as summed_amount,
        sale_id 
    FROM phppos_sales_payments 
) temp on temp.sale_id = phppos_sales.sale_id;
注 您应该尝试格式化您的查询,因为目前基本上无法读取

因此,您的查询应该在这行中找到一些内容

SELECT 
    phppos_sales.sale_id as sale_id, 
    (   item_unit_price * quantity_purchased-item_unit_price * quantity_purchased * discount_percent / 100
    ) +
    (   item_unit_price * quantity_purchased-item_unit_price * quantity_purchased * discount_percent / 100
    ) *
    (   SUM
        (   CASE WHEN cumulative != 1 THEN percent ELSE 0 END
        ) / 100
    ) +
    (
        (
            (   item_unit_price * quantity_purchased-item_unit_price * quantity_purchased * discount_percent / 100
            ) *
            (   SUM
                (CASE WHEN cumulative != 1 THEN percent ELSE 0 END) / 100
                ) + 
                (   item_unit_price * quantity_purchased-item_unit_price * quantity_purchased * discount_percent / 100
                )
            ) *
            (   SUM
                (CASE WHEN cumulative = 1 THEN percent ELSE 0 END)
            ) / 100
        ) as total, 
    temp.summed_amount
FROM phppos_sales_items
INNER JOIN phppos_sales 
    ON phppos_sales_items.sale_id=phppos_sales.sale_id 
INNER JOIN phppos_items 
    ON phppos_sales_items.item_id=phppos_items.item_id 
LEFT OUTER JOIN phppos_sales_items_taxes 
    ON phppos_sales_items.sale_id=phppos_sales_items_taxes.sale_id 
    AND phppos_sales_items.item_id=phppos_sales_items_taxes.item_id 
    AND phppos_sales_items.line=phppos_sales_items_taxes.line 
LEFT JOIN
    (   SELECT
            SUM(payment_amount) as summed_amount,
            sale_id 
        FROM phppos_sales_payments 
    ) temp on temp.sale_id = phppos_sales.sale_id;
WHERE sale_time BETWEEN "2014-08-01 00:00:00" AND "2014-08-09 23:59:59" 
GROUP BY 
    phppos_sales.sale_id, 
    phppos_sales_items.item_id, 
    phppos_sales_items.line 


当然,您可以简单地将其加入到结果中(使用group by sale_id将sale_id加入到select中)。当然,您可以简单地将其加入到结果中(使用group by sale_id将sale_id加入到select中)。当然,您可以简单地将其加入到结果中(使用group by sale_id将sale_id加入到select中)。当然,你可以简单地将其加入到你的结果中(使用group by sale_id将sale_id加入你的选择中)。如果可行,我会选择MAX(a.Sum)或MIN(a.Sum)而不是未聚合的a.Sum,但对于MySQL,你的优化是合法的。@uvgoyal VMai没有问这个问题。我做的最多了:投票给你的用户answer@VMai我的错。道歉!!如果可行,我更喜欢MAX(a.Sum)或MIN(a.Sum)而不是未聚合的a.Sum,但对于MySQL,您的优化是合法的。@uvgoyal VMai没有问这个问题。我已经做了很多事情:向上投票answer@VMai我的错。道歉!!如果可行,我更喜欢MAX(a.Sum)或MIN(a.Sum)而不是未聚合的a.Sum,但对于MySQL,您的优化是合法的。@uvgoyal VMai没有问这个问题。我已经做了很多事情:向上投票answer@VMai我的错。道歉!!如果可行,我更喜欢MAX(a.Sum)或MIN(a.Sum)而不是未聚合的a.Sum,但对于MySQL,您的优化是合法的。@uvgoyal VMai没有问这个问题。我已经做了很多事情:向上投票answer@VMai我的错。道歉!!降为要素,所以也降为+1。降为要素,所以也降为+1。降为要素,所以也降为+1。降为要素,所以也降为+1。