I have 2 tables.
One holds the data for OK parts and the other for rejects.
I like to receive data in the following format:
| YYYY-MM | SUM(ok.qty) | SUM(reject.qty) | reject % |
1) Is it possible to use JOIN
and then some kind of DISTINCT sum(ok.qty)
?
SELECT
DATE_FORMAT(date, '%Y-%m'),
SUM(ok.qty),
SUM(reject.qty),
SUM(reject.qty) / SUM(reject.qty + ok.qty) as reject_percent
FROM ok
JOIN reject ON ok.id = reject.ok_id
GROUP BY DATE_FORMAT(date, '%Y-%m')
2) If not how to eliminate duplicate sub-queries?
SELECT
DATE_FORMAT(date, '%Y-%m'),
SUM(ok.qty),
(SELECT qty FROM reject WHERE ok_id = ok.id),
(SELECT qty FROM reject WHERE ok_id = ok.id) /
( (SELECT qty FROM reject WHERE ok_id = ok.id) + SUM(ok.qty) )
as reject_percent
FROM ok
GROUP BY DATE_FORMAT(date, '%Y-%m')
Right now had to write one query 3 times.
Database design:
ok.id
can have mutiple rejects.
![Database](https://i.stack.imgur.com/P2Cgk.gif)