|
scrip de select sql server 2000
Last post 07-17-2007, 6:52 PM by Alex. 34 replies.
-
07-16-2007, 4:04 PM |
-
Diana
-
-
-
Joined on 03-21-2006
-
-
sysadmin
-
-
|
Re: scrip de select sql server 2000
...a, si mai am o curiozitate: la ce firma ai dat interviul asta?
|
|
-
07-16-2007, 4:11 PM |
-
Diana
-
-
-
Joined on 03-21-2006
-
-
sysadmin
-
-
|
Re: scrip de select sql server 2000
...si cand astia intreaba "acelasi numar de mii de locuitor" ce inteleg prin asta?
|
|
-
07-16-2007, 4:19 PM |
-
Alex
-
-
-
Joined on 10-25-2006
-
Bucuresti
-
sysadmin
-
-
|
Re: scrip de select sql server 2000
astea sunt singurele 2 pe care mi le-am notat.....si eu incerc sa "culeg" cat mai multe....chiar deschisesem un post pe tema asta....dar am vazut ca nu a mers prea departe ideea.....daca reusesc sa mai adun cate ceva iti trimit...sau daca imi mai amintesc.
alex.
|
|
-
07-16-2007, 4:29 PM |
-
Alex
-
-
-
Joined on 10-25-2006
-
Bucuresti
-
sysadmin
-
-
|
Re: scrip de select sql server 2000
asta e linkul unde am incercat sa adun cat mai multe intrebari de pe la interviuri
http://sqlserver.ro/forums/thread/1968.aspx
acelasi numar de mii.....adica 2 judete care au acelasi numar de locuitori la nivel de mii....adica daca unul are 22.300 si altul 22.700 sa fie afisat
eu ma gadesc la varianta asta:
select * from (select sum(nr_locuitori)nr_mii,id_judet from localitate group by id_judet)tab1 join judet tab2 on tab1.id_judet=tab2.id_judet and left(cast(nr_mii as varchar),len(cast(nr_mii as varchar))-3) in (select left(cast(sum(nr_locuitori) as varchar),len(cast(sum(nr_locuitori) as varchar))-3) from localitate l where l.id_judet<>tab1.id_judet group by l.id_judet)
alex.
|
|
-
-
07-16-2007, 5:34 PM |
-
Diana
-
-
-
Joined on 03-21-2006
-
-
sysadmin
-
-
|
Re: scrip de select sql server 2000
Multumesc...nu a ajuns inca (?)... Pentru punctul 3 din prima intrebare ("cea mai populata unitate teritoriala.....") --tabelul temporar cuprinde populatia fiecarui "judet" DECLARE @t TABLE(id_tara int, id_judet int, pop int)
INSERT INTO @t
SELECT t.id_tara, j.id_judet, SUM(nr_locuitori) AS pop
FROM tara t JOIN Judet j ON t.id_tara = j.id_tara
JOIN Localitate l ON j.id_judet = l.id_judet
GROUP BY t.id_tara, j.id_judet
-- aici selectez din fiecare tara "judetul" cel mai populat
SELECT t.id_tara, t.nume_tara, j.id_judet, j.nume_judet, x.mx
FROM Tara t JOIN Judet j ON t.id_tara = j.id_tara
JOIN (SELECT tmp.id_tara, MAX(pop) AS mx
FROM @t AS tmp GROUP BY tmp.id_tara
) AS x ON x.id_tara = j.id_tara
JOIN @t tmp ON x.mx = tmp.pop AND j.id_judet = tmp.id_judet
|
|
-
07-16-2007, 7:32 PM |
-
Alex
-
-
-
Joined on 10-25-2006
-
Bucuresti
-
sysadmin
-
-
|
Re: scrip de select sql server 2000
da...merge f bine si varianta ta........cu tabela temporara....:) alex.
|
|
-
07-16-2007, 8:26 PM |
-
katalyn
-
-
-
Joined on 09-20-2006
-
Bucureşti
-
sysadmin
-
-
|
Re: scrip de select sql server 2000
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.
|
|
-
07-16-2007, 8:51 PM |
-
Alex
-
-
-
Joined on 10-25-2006
-
Bucuresti
-
sysadmin
-
-
|
Re: scrip de select sql server 2000
daca nu ar fi nevoie de afisarea Nume_judet si ar fi de ajuns Nume_tara, Numar_locuitori ar fi de ajuns selectul: 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 care scoate maxim pe tara din suma locuitorilor pe judete :) alex.
|
|
-
07-17-2007, 11:11 AM |
-
B_gd_n[ ]Sahlean
-
-
-
Joined on 07-17-2007
-
Bucuresti
-
sysadmin
-
-
|
Re: scrip de select sql server 2000
Alex: ...as dori sa fac un select care sa-mi intoarca tara,nume_judet,localitate al localitatilor cu cel mai mare numar de locuitori
multumesc mult
<date_test> INSERT INTO Tara (nume_tara,latitudine,longitudine) VALUES ('A',1,1) INSERT INTO Tara (nume_tara,latitudine,longitudine) VALUES ('BB',2,2)
INSERT INTO Judet (id_tara,nume_judet,asezare) VALUES (1,'J_A','est') INSERT INTO Judet (id_tara,nume_judet,asezare) VALUES (1,'J_B','est') INSERT INTO Judet (id_tara,nume_judet,asezare) VALUES (2,'J_C','vest') INSERT INTO Judet (id_tara,nume_judet,asezare) VALUES (2,'J_D','nord') INSERT INTO Judet (id_tara,nume_judet,asezare) VALUES (2,'J_E','est')
INSERT INTO Localitate (id_judet,nume_loc,nr_locuitori) VALUES (10,'L_A',100) INSERT INTO Localitate (id_judet,nume_loc,nr_locuitori) VALUES (10,'L_B',110) INSERT INTO Localitate (id_judet,nume_loc,nr_locuitori) VALUES (10,'L_C',111) INSERT INTO Localitate (id_judet,nume_loc,nr_locuitori) VALUES (20,'L_D',200) INSERT INTO Localitate (id_judet,nume_loc,nr_locuitori) VALUES (30,'L_E',300) INSERT INTO Localitate (id_judet,nume_loc,nr_locuitori) VALUES (30,'L_F',330) INSERT INTO Localitate (id_judet,nume_loc,nr_locuitori) VALUES (40,'L_G',50) INSERT INTO Localitate (id_judet,nume_loc,nr_locuitori) VALUES (40,'L_H',50) INSERT INTO Localitate (id_judet,nume_loc,nr_locuitori) VALUES (40,'L_I',110) INSERT INTO Localitate (id_judet,nume_loc,nr_locuitori) VALUES (40,'L_J',111) INSERT INTO Localitate (id_judet,nume_loc,nr_locuitori) VALUES (50,'L_K',330)
</date_test> <solutie> SELECT L.nume_loc , J.nume_judet , T.nume_tara , L.nr_locuitori FROM Localitate L INNER JOIN Judet J ON L.id_judet = J.id_judet INNER JOIN Tara T ON J.id_tara = T.id_tara WHERE L.nr_locuitori >= ALL(SELECT nr_locuitori FROM Localitate)
</solutie>
|
|
-
07-17-2007, 11:49 AM |
-
B_gd_n[ ]Sahlean
-
-
-
Joined on 07-17-2007
-
Bucuresti
-
sysadmin
-
-
|
Re: scrip de select sql server 2000
Ar fi fost mult mai interesanta urmatoarea cerinta: "select care sa-mi intoarca tara,nume_judet,localitate al localitatilor cu cel mai mare numar de locuitori" din fiecare ţară <solutie> SELECT T.nume_tara, J.nume_judet, L.nume_loc, MAX(L.nr_locuitori) AS Nr FROM Localitate L INNER JOIN Judet J ON L.id_judet = J.id_judet INNER JOIN Tara T ON J.id_tara = T.id_tara GROUP BY T.id_tara, L.id_loc , T.nume_tara, J.nume_judet, L.nume_loc HAVING MAX(L.nr_locuitori) >= ALL(SELECT LSQ.nr_locuitori FROM Localitate LSQ INNER JOIN Judet JSQ ON LSQ.id_judet = JSQ.id_judet WHERE JSQ.id_tara = T.id_tara ) </solutie> <set_de_inregistrari_rezultat> A J_B L_D 200 BB J_C L_F 330 BB J_E L_K 330
</set_de_inregistrari_rezultat>
|
|
-
07-17-2007, 12:21 PM |
-
katalyn
-
-
-
Joined on 09-20-2006
-
Bucureşti
-
sysadmin
-
-
|
Re: scrip de select sql server 2000
Eu am înţeles că este vorba de a selecta fiecare ţara cu judeţul cel mai populat şi numărul de locuitori.
B_gd_n[ ]Sahlean în prima variantă aflăm doar ţara care are cel mai populat judeţ (de fapt aflăm ţara cu judeţul ce deţine localitatea cu cel mai mare număr de locuitori dar nu este tratat cazul în care avem două localităţi în acelaşi oraş). În a 2-a variantă nu este tratat cazul în care există două sau mai multe localităţi intr-un judeţ.
Cătălin D.
|
|
-
07-17-2007, 12:49 PM |
-
B_gd_n[ ]Sahlean
-
-
-
Joined on 07-17-2007
-
Bucuresti
-
sysadmin
-
-
|
Re: scrip de select sql server 2000
katalyn: ... două localităţi în acelaşi oraş ...
? Poate vrei sa spui "două localităţi în acelaşi judet" ?! <date_test> UPDATE Localitate SET nr_locuitori = 330 WHERE nume_loc = 'L_E' </date_test> <set_inregistrari_rezultat> L_E J_C BB 330 L_F J_C BB 330 L_K J_E BB 330
</set_inregistrari_rezultat>
|
|
-
07-17-2007, 1:02 PM |
-
B_gd_n[ ]Sahlean
-
-
-
Joined on 07-17-2007
-
Bucuresti
-
sysadmin
-
-
|
Re: scrip de select sql server 2000
katalyn: Eu am înţeles că este vorba de a selecta fiecare ţara cu judeţul cel mai populat şi numărul de locuitori.
B_gd_n[ ]Sahlean în prima variantă aflăm doar ţara care are cel mai populat judeţ (de fapt aflăm ţara cu judeţul ce deţine localitatea cu cel mai mare număr de locuitori dar nu este tratat cazul în care avem două localităţi în acelaşi oraş). În a 2-a variantă nu este tratat cazul în care există două sau mai multe localităţi intr-un judeţ.
[1] Cerinţa din primul mesaj este: "as dori sa fac un select care sa-mi intoarca [...] localitatilor cu cel mai mare numar de locuitori" Cerinţa este foarte clară şi nu implică condiţii privitoare la ţară sau/şi judeţ. Ai interpretat eronat enunţul. [2] Vezi mesajul anterior. Cerinţa era foarte clară şi tu ai interpretat-o eronat.
|
|
-
07-17-2007, 1:05 PM |
Page 2 of 3 (35 items)
2
|
|
|