Reputation: 55
table 1 - jos_addRabotyAndProstoyMain
| id | Marka | OtrabotanoMachine_hours|
| 8 | 90979 | 6 |
| 9 | 90979 | 11 |
| 10 | 90979 | 11 |
| 11 | 90979 | 11 |
| 12 | 90979 | 11 |
table 2 - jos_addRabotyAndProstoySecond
| id | Hours | id_fk|
| 13 | 2 | 8 |
| 14 | 2 | 9 |
| 15 | 3 | 9 |
| 16 | 3 | 9 |
| 17 | 4 | 10 |
| 18 | 2 | 10 |
| 19 | 2 | 11 |
| 20 | 3 | 12 |
My inner join query:
SELECT avto.Marka AS Marka,sum(main.OtrabotanoMachine_hours) as 'work hours', SUM(sec.Hours) as downtime
FROM
jos_addRabotyAndProstoyMain main
INNER JOIN avto ON main.Marka=avto.ID_Avto
INNER JOIN jos_addRabotyAndProstoySecond sec ON sec.id_fk = main.id
GROUP BY avto.Marka
I get the following result:
| Marka | work hours | downtime|
| Liebherr | 83 | 21 |
As you can see, sum in column 'work hours' incorrect(83 instead 50), because for primary key in the main table complies 1-3 foreign keys in the secondary table.
I think, what in row
INNER JOIN jos_addRabotyAndProstoySecond sec ON sec.id_fk = main.id
need some filter.I am no idea how to solve it, please help.
I want result such as:
| Marka | work hours | downtime|
| Liebherr | 50 | 21 |
Upvotes: 3
Views: 139
Reputation: 72175
You can fix your query by aggregating jos_addRabotyAndProstoySecond
table by id_fk
field. The JOIN
operation between jos_addRabotyAndProstoySecond
and jos_addRabotyAndProstoyMain
is transformed into an 1-1 join and duplicates are eliminated:
SELECT avto.Marka AS Marka,
sum(main.OtrabotanoMachine_hours) as 'work hours',
SUM(sec.Hours) as downtime
FROM jos_addRabotyAndProstoyMain main
INNER JOIN avto ON main.Marka=avto.ID_Avto
INNER JOIN (
SELECT id_fk, SUM(Hours) AS Hours
FROM jos_addRabotyAndProstoySecond
GROUP BY id_fk) sec ON sec.id_fk = main.id
GROUP BY avto.Marka
Upvotes: 2