Вопрос

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

Это было полезно?

Решение

You can try like this..

SELECT 
    DATE_FORMAT(date, '%Y-%m'), 
    SUM(ok.qty), 
    SUM(reject.qty), 
    ((SUM(reject.qty) / SUM(reject.qty + ok.qty))*100)as reject_percent
FROM ok
inner JOIN (Select Ok_Id,Sum(qty) as qty from Reject group by OK_id) as reject ON ok.id = reject.ok_id
GROUP BY DATE_FORMAT(date, '%Y-%m')
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top