Reputation: 852
I can get it to work in two seperate queries but I can't do both joins to have all three columns. Can someone help me out please? I need the output something like this:
+------------------------------------------------+
| CLUSTER_NAME | TOTAL_UNITS |ALLOCATED_UNITS|
+------------------------------------------------+
| CLUSTER1 | 300 |25 |
+------------------------------------------------+
| CLUSTER2 | 400 |45 |
+------------------------------------------- ----+
Two seperate queries are working:
Query 1:
SELECT CLUSTER_INFO.CLUSTER_NAME, sum(HOST_INFO.UNIT_COUNT) as 'TOTAL_UNITS'
FROM CLUSTER_INFO INNER JOIN
HOST_INFO ON HOST_INFO.CLUSTER_ID = CLUSTER_INFO.CLUSTER_ID
GROUP BY CLUSTER_INFO.CLUSTER_NAME
Query 2:
SELECT CLUSTER_INFO.CLUSTER_NAME, SUM(VM_INFO.UNIT_COUNT) as 'ALLOCATED_UNITS'
FROM CLUSTER_INFO INNER JOIN
VM_INFO ON CLUSTER_INFO.CLUSTER_ID = VM_INFO.CLUSTER_ID
GROUP BY CLUSTER_INFO.CLUSTER_NAME
Table 1 (CLUSTER_INFO):
+--------------------------------+
| CLUSTER_NAME | CLUSTER_ID |
+--------------------------------+
| CLUSTER1 | 1 |
+--------------------------------+
| CLUSTER2 | 2 |
+--------------------------------+
Table 2 (HOST_INFO):
+------------------------------------------------+
| HOST_NAME | CLUSTER_ID | UNIT_COUNT |
+------------------------------------------------+
| HOST1 | 1 | 150 |
+------------------------------------------------+
| HOST2 | 1 | 150 |
+------------------------------------------------+
| HOST3 | 2 | 200 |
+------------------------------------------------+
| HOST4 | 2 | 200 |
+------------------------------------------------+
Table 3 (VM_INFO):
+------------------------------------------------+
| VM_NAME | CLUSTER_ID | UNIT_COUNT |
+------------------------------------------------+
| VM1 | 1 | 10 |
+------------------------------------------------+
| VM2 | 1 | 15 |
+------------------------------------------------+
| VM3 | 2 | 20 |
+------------------------------------------------+
| VM4 | 2 | 25 |
+------------------------------------------------+
http://www.sqlfiddle.com/#!2/5f9614/5
Upvotes: 1
Views: 420
Reputation: 1269773
It is safest to do this using two subqueries:
SELECT ci.CLUSTER_NAME, hi.TOTAL_UNITS, vi.ALLOCATED_UNITS
FROM CLUSTER_INFO ci LEFT JOIN
(SELECT hi.CLUSTER_ID, SUM(hi.UNIT_COUNT) as TOTAL_UNITS
FROM HOST_INFO hi
GROUP BY hi.CLUSTER_ID
) hi
ON ci.CLUSTER_ID = hi.CLUSTER_ID LEFT JOIN
(SELECT vi.CLUSTER_ID, SUM(vi.UNIT_COUNT) as ALLOCATED_UNITS
FROM VM_INFO vi
GROUP BY vi.CLUSTER_ID
) vi
ON ci.CLUSTER_ID = vi.CLUSTER_ID ;
I introduced table aliases to make the query more readable. And, don't put column aliases in single quotes. You don't need to quote these names at all. Only use single quotes for date and string constants.
This SQL Fiddle shows it working.
Upvotes: 1