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 :D

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 :udri:

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

:zbun:
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/