In MySQL I have two tables:
Table MC:
----------------
|TransNo | Qty |
|--------|-----|
| xxx1 | 4 |
| xxx3 | 3 |
and
Table Amex:
----------------
|TransNo | Qty |
|---------|-----|
| xxx1 | 2 |
| xxx5 | 1 |
I need to sum the Qty
column from table MC
(eq. 7) and table Amex
(eq. 3) and have result as Total Qty.
When I do
SELECT (SUM(amex.Qty) + SUM(mc.Qty)) as total_qty from amex, mc
I get the cartesian product (20), but the correct answer I need is 10. How do I need to change this query to get the correct result?
MySQL SUM() function retrieves the sum value of an expression which is made up of more than one columns. The above MySQL statement returns the sum of multiplication of 'receive_qty' and 'purch_price' from purchase table for each group of category ('cate_id') .
The aggregate function SUM is ideal for computing the sum of a column's values. This function is used in a SELECT statement and takes the name of the column whose values you want to sum. If you do not specify any other columns in the SELECT statement, then the sum will be calculated for all records in the table.
The SUM() function returns the total sum of a numeric column.
SELECT SUM(t.Qty) AS total_qty
FROM (SELECT Qty FROM MC
UNION ALL
SELECT Qty FROM Amex) t
If you wish to avoid using Union or Union ALL (probably for efficiency reasons), then the following works:
SELECT (1.Qty+2.Qty) AS total_qty FROM (SELECT SUM(Qty) Qty FROM MC) 1,
(SELECT SUM(Qty) Qty FROM Amex) 2;
Here's an example for if you wish to expand this out to include a Group By condition. Let's say we have a Cust_ID on both MC and Amex to identify the customer which made each order, and we want to know the sums for each customer. The code would then look like this:
SELECT COALESCE(1.Cust_ID, 2.Cust_ID) Cust_ID, (1.Qty+2.Qty) AS total_qty
FROM (SELECT Cust_ID, SUM(Qty) Qty FROM MC GROUP BY Cust_ID) 1
FULL OUTER JOIN (SELECT Cust_ID, SUM(Qty) Qty FROM Amex GROUP BY Cust_ID) 2 ON 1.Cust_ID = 2.Cust_ID;
If a Customer table exists in the database, then this can be simplified to:
SELECT c.Cust_ID, (1.Qty+2.Qty) AS total_qty FROM Customer c
LEFT JOIN (SELECT Cust_ID, SUM(Qty) Qty FROM MC GROUP BY Cust_ID) 1 ON 1.Cust_ID = c.Cust_ID
LEFT JOIN (SELECT Cust_ID, SUM(Qty) Qty FROM Amex GROUP BY Cust_ID) 2 ON 2.Cust_ID = c.Cust_ID;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With