SQL baze podataka - Sponzor: Baze-Podataka.net MySQL, MSSQL, Oracle, Access, ODBC. Ako imate problem brže i preciznije ćete dobiti odgovor ako priložite strukturu tabela ili skript koji kreira tabele i puni ih test podacima umesto što to problem opisujete samo rečima. Sponzor: Baze-Podataka.net - Blog o bazama podataka |
|
Alati teme | Način prikaza |
04. 09. 2011. | #1 |
Miljenko Rebernišak
Qualified
Datum učlanjenja: 05.03.2009
Lokacija: Jagodina-Beograd
Poruke: 191
Hvala: 4
25 "Hvala" u 22 poruka
|
Sumiranje parova
Pozdrav,
imam jedan problem na kome sam zakucao. Najme imam tabelu Skup_proizvoda(ID1,ID2,broj) ID1 i ID2 referenciraju tabelu proizvodi. Ono sto treba da uradim je da izbacim sumu brojeva za svaki par. Par se moze pojavljivati vise puta. Takodje pod jednim parom se podrazumeva 1|2 i 2|1 Evo primer podatak ID1|ID2|broj ------------ 1|2|10 2|1|20 1|3|5 Ocekivani rezultat treba da bude ID1|ID2|BROJ ------------- 1|2|30 1|3|5 Resenje treba da bude cist SQL
__________________
Me on twitter |
04. 09. 2011. | #2 |
expert
Grand Master
Datum učlanjenja: 11.04.2010
Poruke: 998
Hvala: 141
959 "Hvala" u 153 poruka
|
PHP kôd:
1 2 30 E sad jedino još da selektuje ove single parove... |
"Hvala" webarto za poruku: |
04. 09. 2011. | #3 |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
Ja bih rađe to uradio sa ugnježđenim upitom da dovedem ID1 i ID2 u red, pa onda nad time običan GROUP BY.
Znači nešto na foru Kôd:
SELECT id1, id2, sum(broj) FROM ( SELECT CASE WHEN id1 > id2 THEN id2 ELSE id1 AS id1, CASE WHEN id1 > id2 THEN id1 ELSE id2 AS id2, broj FROM dpt ) a GROUP BY id1, id2
__________________
blog |
"Hvala" jablan za poruku: |
05. 09. 2011. | #4 |
Miljenko Rebernišak
Qualified
Datum učlanjenja: 05.03.2009
Lokacija: Jagodina-Beograd
Poruke: 191
Hvala: 4
25 "Hvala" u 22 poruka
|
@webarto Ne ispisuje sve redove, tj ispisuje one koji se javljaju u obe varijante dok oni koji su u jednoj ne ispisuje. Hvala u svakom slucaju na odgovoru
@Jablan da to je to resenje. Sad vidim kako je prosto, ali kad ti nije dan, nije ti
__________________
Me on twitter |
05. 09. 2011. | #5 |
expert
Grand Master
Datum učlanjenja: 11.04.2010
Poruke: 998
Hvala: 141
959 "Hvala" u 153 poruka
|
Da, napisao sam to @jablan, znaš li ti možda da prepraviš ovaj moj query, a da vraća oba rezultata, ili ovaj suprotni Hvala.
|
06. 09. 2011. | #6 |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
Teško bogami. Mislim da nije dobar put. Imaš banalan primer, npr da imaš u tabeli
Kôd:
1 2 10 1 2 10 2 1 10 2 1 10
__________________
blog |
"Hvala" jablan za poruku: |
06. 09. 2011. | #7 |
Ivan Dilber
Sir Write-a-Lot
|
evo ovako:
Kôd:
SELECT t1.id1, t1.id2, IF(t2.id1, (t1.broj + t2.broj), t1.broj) AS broj FROM proba t1 LEFT JOIN proba t2 ON (t1.id1 = t2.id2 AND t1.id2 = t2.id1)
__________________
Leadership is the art of getting people to want to do what you know must be done. |
06. 09. 2011. | #8 |
Miljenko Rebernišak
Qualified
Datum učlanjenja: 05.03.2009
Lokacija: Jagodina-Beograd
Poruke: 191
Hvala: 4
25 "Hvala" u 22 poruka
|
@ivanhoe Nece bas raditi kako treba. Radi sumiranje lepo, medjutim ne izbacuje duplikate iz rezultata (sto treba).
I ja sam krenuo da resavam sa join-om medjutim zakucao sam na tom delu izbacivanja duplih rezultata
__________________
Me on twitter |
06. 09. 2011. | #9 |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
Nisam siguran da razumem ideju:
Kôd:
test=# create table dpt (id1 integer, id2 integer, broj integer); CREATE TABLE test=# insert into dpt values (1, 2, 10); INSERT 0 1 test=# insert into dpt values (1, 2, 10); INSERT 0 1 test=# insert into dpt values (2, 1, 10); INSERT 0 1 test=# insert into dpt values (2, 1, 10); INSERT 0 1 test=# insert into dpt values (1, 3, 10); INSERT 0 1 test=# SELECT t1.id1, t1.id2, t1.broj + coalesce(t2.broj, 0) AS broj FROM dpt t1 LEFT JOIN dpt t2 ON (t1.id1 = t2.id2 AND t1.id2 = t2.id1); id1 | id2 | broj -----+-----+------ 1 | 2 | 20 1 | 2 | 20 1 | 2 | 20 1 | 2 | 20 1 | 3 | 10 2 | 1 | 20 2 | 1 | 20 2 | 1 | 20 2 | 1 | 20 (9 rows)
__________________
blog |
06. 09. 2011. | #10 |
Ivan Dilber
Sir Write-a-Lot
|
da, da, nisam pazljivo procitao opis, ne resava se duplikata... mada mora da ima neka fora i ovako, trebalo bi da (skoro) svaki subquery moze da se resi i JOIN-om
EDIT: Evo ovo radi: Kôd:
SELECT t1.`id1`, t1.id2, t1.broj + coalesce(t2.broj, 0) AS broj FROM proba t1 LEFT JOIN proba t2 ON (t1.id1 = t2.id2 AND t1.id2 = t2.id1) GROUP BY IF(t1.id1<t1.id2, t1.id1, t1.id2), IF(t1.id1 > t1.id2, t1.id1, t1.id2)
__________________
Leadership is the art of getting people to want to do what you know must be done. Poslednja izmena od ivanhoe : 06. 09. 2011. u 16:12. |
|
|