Uite încă o variantă de rezolvare în care folosesc un inner join între două subinterogări totuşi ce trebuie să se întâmple dacă o ţară are două judeţe cu acelaşi număr de locuitori pe primul loc?
SELECT Q.NUME_TARA, W.NUME_JUDET, Q.NR_LOCUITORI FROM (
SELECT NUME_TARA, MAX(NUMAR_LOCUITORI) AS NR_LOCUITORI FROM (
SELECT NUME_TARA, NUME_JUDET, SUM(NR_LOCUITORI) AS NUMAR_LOCUITORI
FROM TARA T INNER JOIN JUDET J ON T.ID_TARA=J.ID_TARA INNER JOIN LOCALITATE L ON J.ID_JUDET=L.ID_JUDET
GROUP BY NUME_TARA, NUME_JUDET
) X
GROUP BY NUME_TARA
) Q INNER JOIN (
SELECT NUME_TARA, NUME_JUDET, NUMAR_LOCUITORI FROM (
SELECT NUME_TARA, NUME_JUDET, SUM(NR_LOCUITORI) AS NUMAR_LOCUITORI
FROM TARA T INNER JOIN JUDET J ON T.ID_TARA=J.ID_TARA INNER JOIN LOCALITATE L ON J.ID_JUDET=L.ID_JUDET
GROUP BY NUME_TARA, NUME_JUDET
) Y
) W ON Q.NUME_TARA=W.NUME_TARA AND Q.NR_LOCUITORI=W.NUMAR_LOCUITORI
ORDER BY 1,3 DESC, 2
Datele pentru test:
INSERT INTO Tara(nume_tara, latitudine, longitudine) VALUES('Romania',0,0)
INSERT INTO Tara(nume_tara, latitudine, longitudine) VALUES('SUA',0,0)
GO
INSERT INTO Judet (ID_Tara,nume_judet, asezare) VALUES (1,'Timis','')
INSERT INTO Judet (ID_Tara,nume_judet, asezare) VALUES (1,'Constanta','')
INSERT INTO Judet (ID_Tara,nume_judet, asezare) VALUES (2,'Denver','')
GO
INSERT INTO Localitate(ID_Judet,nume_loc,nr_locuitori) VALUES(10,'Timisoara mare',250)
INSERT INTO Localitate(ID_Judet,nume_loc,nr_locuitori) VALUES(10,'Timisoara mica',25)
INSERT INTO Localitate(ID_Judet,nume_loc,nr_locuitori) VALUES(20,'Cuza',1250)
INSERT INTO Localitate(ID_Judet,nume_loc,nr_locuitori) VALUES(20,'Mangalia',270)
INSERT INTO Localitate(ID_Judet,nume_loc,nr_locuitori) VALUES(30,'denver',11250)
iar rezultatul este:
NUME_TARA | NUME_JUDET | NR_LOCUITORI
SUA | Denver | 11250
Romania | Constanta | 1520
Sper că am înţeles bine cerinţa...
Cătălin D.