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。