FONForum http://www.fonforum.org/ |
|
Pomoc oko upita http://www.fonforum.org/viewtopic.php?f=8&t=11671 |
Stranica 1 od 1 |
Autoru: | mighty_lemon [ 17.01.2008. 16:01:30 ] |
Tema posta: | Pomoc oko upita |
okusacu ukratko da objasnim format baze. Naime, iz extracta, iz jednog drugog sistema mora se uraditi brojanje po odredjenim kriterijumima. Svaki customer ima svoj ID, npr.: AAA-1 AAA-2 AAA-3 AAB-1 itd. Imamo tip customera, neka bude TIP1, TIP2, TIP3, itd. Imamo dva product-a vezana za customer-e. Svaki product je za svakog customer-a ocenjen ocenama A, B ili C i to nije konstantno. Situacija sledeca: AAA-1; TIP1; PRODUCT1; A AAA-1; TIP1; PRODUCT2; B AAA-2; TIP3; PRODUCT2; A AAA-2; TIP3; PRODUCT1, C AAA-3, TIP1; PRODUCT1, B AAA-3, TIP1; PRODUCT2, C itd, itd Tabela ima oko 10 000 redova Svaki customer ima samo jednu kombinaciju! E sad, potrebno je uraditi sledece: - za svaku kombinaciju Product - Ocena - za svaki tip koji je broj customer-a! Postoje customeri koji imaju samo jedan product i njih je potrebno izdovojiti po tipu i oceni Dakle, recimo, koliko ima customera koji su TIP1 i imaju kombinaciju PRODUCT1; A, PRODUCT2; B (i tako za svaki tip i kombinaciju). Nadam se da sam dovoljno dobro objasnio, i sam sam se sludeo ![]() Svaka pomoc je dobro dosla! THNX |
Autoru: | kliford [ 17.01.2008. 17:05:04 ] |
Tema posta: | |
'Ajde da malo pojasnimo... Trazi se brojanje? Citiraj: E sad, potrebno je uraditi sledece: - za svaku kombinaciju Product - Ocena - za svaki tip koji je broj customer-a! Hoces upit za svaki produkt da izvuces broj ocena? I hoces za svaki tip broj customera? ako je to to, onda ovako nesto: Kod: SELECT product, count('ocena') FROM tabela GROUP BY product i Kod: SELECT tip, count('customer') FROM tabela GROUP BY tip Nadam se da je to to... Malo si konfuzan ![]() Ako ne, pojansi malo problem.. Recimo, ovo me buni: Citiraj: Svaki customer ima samo jednu kombinaciju!
Sta ti znaci to 'kombinacija'? Nije zapis, posto vidim u primeru da ti se ponavljaju customeri po dva puta... |
Autoru: | mighty_lemon [ 17.01.2008. 17:24:03 ] |
Tema posta: | |
Da pojasnim svaki customer ima jednu kombinaciju koja izgleda ovako: PROD1 A PROD2 B PROD1 A PROD2 C PROD1 B PROD2 C itd. E sad, npr. treba mi broj customer-a koji su TIP1 i koji imaju kombinaciju PROD1 A, PROD2 B za svaku od tih kombinacija mi treba broj po tipu customer-a. Dodatni zez je to sto postoje customer-i kojima je dodeljen samo JEDAN product i ocena pa je njih potrebno dodatno izdvojiti ali po tipu, product-u i oceni. Npr, koliko customer-a koji su TIP1 ima PRODUCT1 ocene A Uffff, valjda sam malkiiice jasniji ![]() |
Autoru: | kliford [ 17.01.2008. 18:57:27 ] |
Tema posta: | |
Auh... ovi proizvodi su malo nesrecno isprojektovani... Iz tvoje price zakljucujem da su oni konstantni... Onda je bolje da uz svakog customera imas samo polje prva_ocena i druga-ocena.... Probaj da napravis view koji ce imati sledecu strukturu: [cutomer] [tip] [ocena prvog proizvoda] [ocena drugog proizvoda] to bi nesto moglo preko self join-a da se odradi... pa nad tim izvrsi upit Kod: SELECT type, prva_ocena, druga_ocena, count('customer')
FROM ime_view-a GROUP BY type, prva_ocena, druga_ocena |
Autoru: | mighty_lemon [ 17.01.2008. 23:53:13 ] |
Tema posta: | |
ali potrebni su mi i proizvodi ![]() jedno od resenja: Prvi upit trazi customere kojima je dodeljen PRODUCT1 sa ocenom a, b ili c Drugi trazi customere kojima je dodeljen PRODUCT2 sa ocenom a, b ili c Uvek imam jednu kombinaciju Treci upit trazi ID koji se ponavlja u obe tabele Dakle, to je ID koji odgovara kombinaciji koju smo zadali count mi prebrojava ID po tipu pravi se spisak ID-a koji su se u nekoj od kombinaciji pojavljivali dva puta taj spisak se oduzima od maticnog i dobijamo spisak ljudi kojima je dodeljen samo jedan Product mozda postoji laksi nacin da se ovo izvede ![]() |
Autoru: | kliford [ 18.01.2008. 01:47:47 ] |
Tema posta: | |
pa onda samo u view dodaj kolone [naziv prvog proizvoda] i [naziv drugog proizvoda]... pa i njih pozivaj u ovom shirem upitu... |
Autoru: | mighty_lemon [ 18.01.2008. 09:06:40 ] |
Tema posta: | |
Ali koliko kapiram, tu se ne radi vezivanje jedne kombinacije product1 ocena, product2 ocena za jedan ID, a upravo to mi je potrebno... Ili gresim!? |
Autoru: | kliford [ 18.01.2008. 10:32:45 ] |
Tema posta: | |
pazi moguce je odraditi nesto u ovom fazonu: Kod: SELECT t1.customer as customer, t1.type as type, t1.product AS prvi_prod, t2.product AS drugi_prod, t1.ocena AS prva_ocena, t2.ocena AS druga_ocena
FROM tabela t1 LEFT JOIN tabela t2 ON (t1.customer=t2.customer) && (t1.product!=t2.product) Ovo vraca nesto vrlo slicno onome sto tebi treba... samo sto ce ti customeri koji imaju oba proizvoda biti duplirani.. tj. imaces ovako nesto: cust1; prod1; A; prod2; C; cust1; prod2; C; prod1; A; ne znam, poigraj se sa ovim upitom sto sam ti poslao... pa od njega napravi view... |
Autoru: | mighty_lemon [ 18.01.2008. 11:11:00 ] |
Tema posta: | |
Tako nesto mi i treba!! Hvala!! |
Autoru: | Bageri [ 18.01.2008. 11:13:00 ] |
Tema posta: | |
mighty_lemon je napisao: ali potrebni su mi i proizvodi ![]() jedno od resenja: Prvi upit trazi customere kojima je dodeljen PRODUCT1 sa ocenom a, b ili c Drugi trazi customere kojima je dodeljen PRODUCT2 sa ocenom a, b ili c Uvek imam jednu kombinaciju Treci upit trazi ID koji se ponavlja u obe tabele Dakle, to je ID koji odgovara kombinaciji koju smo zadali Ovo bi trebalo da radi isto to: Kod: select * from Customer C where exists ( select 1 from Customer c1 where C.CustomerID = c1.CustomerID and c1.ProductID=PRODUCT1) and exists ( select 1 from Customer c2 where C.CustomerID = c2.CustomerID and c2.ProductID=PRODUCT2) mighty_lemon je napisao: count mi prebrojava ID po tipu pravi se spisak ID-a koji su se u nekoj od kombinaciji pojavljivali dva puta ![]() Valjda samo grupishesh po tipu na ovaj skup?!? mighty_lemon je napisao: taj spisak se oduzima od maticnog i dobijamo spisak ljudi kojima je dodeljen samo jedan Product A ti hocesh spisak ljudi kojima je dodeljen samo jedan product? Moze ovako: Kod: select * from Customer C where (exists ( select 1 from Customer c1 where C.CustomerID = c1.CustomerID and c1.ProductID=PRODUCT1) and not exists ( select 1 from Customer c2 where C.CustomerID = c2.CustomerID and c2.ProductID=PRODUCT2) ) or (not exists ( select 1 from Customer c1 where C.CustomerID = c1.CustomerID and c1.ProductID=PRODUCT1) and exists ( select 1 from Customer c2 where C.CustomerID = c2.CustomerID and c2.ProductID=PRODUCT2) ) ili pametnije Kod: select c2.* from
(select CustomerID,count(*) as countCustomer from Customer group by CustomerID) c1 left join (select CustomerID,ProductID,count(*) as countProduct from Customer group by CustomerID,ProductID) c2 on (c1.CustomerID=c2.CustomerID) where (c1.countCustomer=c2.countProduct) |
Stranica 1 od 1 | Sva vremena su u UTC + 1 sat |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |