我有两个查询查询 1:
SELECT
e.eid, e.item as 'ITEM', SUM(s.qty) as 'TOTAL SOLD'
from
tbl_sales s,
tbl_matentry e
WHERE
e.eid = s.item
GROUP By e.eid ;
Run Code Online (Sandbox Code Playgroud)
结果 1:
+---------+-------------+---------------+
| eid | ITEM | TOTAL SOLD |
+---------+-------------+---------------+
| 1 | rupa | 5 |
| 2 | pan america | 3 |
| 3 | John Player | 10 |
| 4 | classmate | 11 |
| 5 | lepakshi | 55 |
| 6 | lee | 14 |
| 7 | puma | 9 |
+---------+-------------+---------------+
Run Code Online (Sandbox Code Playgroud)
查询 2:
SELECT
e.eid, e.item as 'ITEM', SUM(s.qty) as 'TOTAL STOCK'
from
tbl_purchases p,
tbl_matentry e
WHERE
e.eid = p.item
GROUP By e.eid ;
Run Code Online (Sandbox Code Playgroud)
结果 2:
+---------+-------------+--------------------+
| eid | ITEM | TOTAL STOCK |
+---------+-------------+--------------------+
| 1 | rupa | 41 |
| 2 | pan america | 45 |
| 3 | John Player | 32 |
| 4 | classmate | 75 |
| 5 | lepakshi | 56 |
| 6 | lee | 65 |
| 7 | puma | 50 |
+---------+-------------+--------------------+
Run Code Online (Sandbox Code Playgroud)
当我将两个 sql 语句组合成单个语句时,我得到的输出不正确
到目前为止,我已经尝试过这个
SELECT
e.eid,
e.item as 'ITEM',
SUM(p.qty) as 'TOTAL STOCK',
SUM(s.qty) as ' TOATL SOLD',
(SUM(p.qty)-SUM(s.qty)) as 'BALANCE STOCK'
FROM
tbl_matentry e
LEFT OUTER JOIN
tbl_purchases p ON p.item = e.eid
LEFT OUTER JOIN
tbl_sales s ON s.item=e.eid
GROUP BY e.eid ORDER BY e.eid
+-----+-------------+-------+------+---------+
| eid | ITEM | STOCK | SOLD | BALANCE |
+-----+-------------+-------+------+---------+
| 1 | rupa | 123 | 15 | 108 |
| 2 | pan america | 90 | 6 | 84 |
| 3 | John Player | 64 | 20 | 44 |
| 4 | classmate | 150 | 22 | 128 |
| 5 | lepakshi | 112 | 110 | 2 |
| 6 | lee | 130 | 28 | 102 |
| 7 | puma | 100 | 18 | 82 |
+-----+-------------+-------+------+---------+
Run Code Online (Sandbox Code Playgroud)
我如何得到正确的结果?我的查询中的错误/错误在哪里。请查看我的查询并帮助我获得正确的数据。
我的预期输出是
+---------+-------------+------------------+-----------------+------------------+
| eid | ITEM | TOTAL STOCK | TOTAL SOLD | BALANCE STOCK |
+---------+-------------+------------------+-----------------+------------------+
| 1 | rupa | 41 | 5 | 36 |
| 2 | pan america | 45 | 3 | 42 |
| 3 | John Player | 32 | 10 | 22 |
| 4 | classmate | 75 | 11 | 64 |
| 5 | lepakshi | 56 | 55 | 1 |
| 6 | lee | 65 | 14 | 51 |
| 7 | puma | 50 | 9 | 41 |
+---------+-------------+------------------+-----------------+------------------+
Run Code Online (Sandbox Code Playgroud)
Tar*_*ryn 14
您遇到的问题很可能来自 ,tbl_sales
因为您item
可以多次出现在表中。当您然后将您的表连接在一起时,您将返回qty
fromtbl_purchases
中的每一行tbl_sales
。
您可以通过SELECT
对表执行 a 来查看此行为:
SELECT e.*, p.qty purQty, s.qty salesQty
FROM tbl_matentry e
LEFT OUTER JOIN tbl_purchases p
ON p.item = e.eid
LEFT OUTER JOIN tbl_sales s
ON s.item=e.eid
ORDER BY e.eid;
Run Code Online (Sandbox Code Playgroud)
见演示。您将在我的示例中看到,rupa
数量出现两次,因为tbl_sales
.
获得结果的一种方法是在子查询中计算TotalSold
和TotalStock
:
select e.eid,
e.item,
coalesce(p.TotalStock, 0) TotalStock,
coalesce(s.TotalSold, 0) TotalSold,
coalesce(p.TotalStock, 0) - coalesce(s.TotalSold, 0) BalanceStock
from tbl_matentry e
left join
(
select item, sum(qty) TotalSold
from tbl_sales
group by item
) s
on e.eid = s.item
left join
(
select item, sum(qty) TotalStock
from tbl_purchases
group by item
) p
on e.eid = p.item;
Run Code Online (Sandbox Code Playgroud)
这也可以使用单个子查询编写为tbl_sales
:
select e.eid,
e.item,
sum(p.qty) TotalStock,
coalesce(s.TotalSold, 0) TotalSold,
coalesce(sum(p.qty)) - coalesce(s.TotalSold, 0) BalanceStock
from tbl_matentry e
left join tbl_purchases p
on e.eid = p.item
left join
(
select item, sum(qty) TotalSold
from tbl_sales
group by item
) s
on e.eid = s.item
group by e.eid, e.item, TotalSold;
Run Code Online (Sandbox Code Playgroud)
最简单的解决方案是联合他们。至于错误,您正在加入销售和采购,有点乘以苹果和橙子(一次采购乘以 3 个销售额,反之亦然,在您的示例的第一行,rupa 123 - 15 而不是 41 - 5 )。
SELECT eid, item, SUM(tsl) AS 'TOTAL SOLD', SUM(tsk) AS 'TOTAL STOCK', SUM(tsk) - SUM(tsl) AS 'BALANCE STOCK'
FROM
(
SELECT e.eid, e.item AS 'ITEM', SUM(s.qty) AS tsl, 0 AS tsk
FROM tbl_sales s JOIN tbl_matentry e ON e.eid = s.item
GROUP BY e.eid
UNION
SELECT e.eid, e.item AS 'ITEM', 0 AS tsl, SUM(p.qty) AS tsk
FROM tbl_purchases p JOIN tbl_matentry e ON e.eid = p.item
GROUP BY e.eid
) x
GROUP BY eid
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
86037 次 |
最近记录: |