Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Znowu left joiny
kasztan
post
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 9.05.2003
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Cześć,
kolejny dzień ślęczenia nad zapytaniem i nic.
Wątek http://forum.php.pl/viewtopic.php?t=6692 przestudiowałem dość szczegółowo i nie potrafiłem zrobić swojego zapytania.

Mam 3 table: agenci, firmy, produkty. Chcę zliczyć ile każdy agent pozyskał produktów i firm. Nie będę rozpisywał poszczególnych atrybutów dla każdej z tabel. Wszystko widać z zapytań.
Może jednak nie widać, bo coś się nie mogę doczekać odpowiedzi. Więc powiem tylko te najważniejsze:
agents_pl: agent_id
firms_pl_transact: firm_id, agent_id
products_pl_transact: product_id, firm_id, agent_id.

Zapytanie o liczbę firm wygląda tak i działa o.k.:
[sql:1:b467487e3b]
select a.firstname 'Imię', a.lastname 'Nazwisko', count(f.agent_id) as 'Liczba firm'
from agents_pl a
left join firms_pl_transact f on (a.agent_id = f.agent_id)
WHERE
a.active_i = 1
AND
a.agent_id not in (1, 2)
group by a.agent_id
order by 'Liczba firm' desc, a.lastname;
[/sql:1:b467487e3b]

Analogicznie zapytanie o liczbę produktów wygląda tak i działa o.k.:
[sql:1:b467487e3b]
select a.firstname 'Imię', a.lastname 'Nazwisko', count(p.agent_id) as 'Liczba produktów'
from agents_pl a
left join products_pl_transact p on (a.agent_id = p.agent_id)
WHERE
a.active_i = 1
AND
a.agent_id not in (1, 2)
group by a.agent_id
order by 'Liczba produktów' desc, a.lastname;
[/sql:1:b467487e3b]

No i teraz potrzebuję zapytania, które da mi sumę tych firm i produktów.
Niestety w tej postaci, jak poniżej, dostaję co prawda jakieś wyniki, ale są bzdurne.
[sql:1:b467487e3b]
select a.firstname 'Imię', a.lastname 'Nazwisko', count(p.agent_id) + count(f.agent_id) as 'Liczba umów'
from agents_pl a
left join products_pl_transact p on (a.agent_id = p.agent_id)
left join firms_pl_transact f on (a.agent_id = f.agent_id)
WHERE
a.active_i = 1
AND
a.agent_id not in (1, 2)
group by a.agent_id
order by 'Liczba umów' desc, a.lastname
[/sql:1:b467487e3b]

Help me.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
kasztan
post
Post #2





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 9.05.2003
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Cytat
...
1) dlaczego piszesz w select'cie
[sql:1:7d7708ca46]SELECT a.firstname 'Imię', a.lastname 'Nazwisko'[/sql:1:7d7708ca46]
czy te dwa pola maja byc osobno? czy nie lepiej napisac
[sql:1:7d7708ca46]SELECT (a.firstname+' '+a.lastname) 'Imie i Nazwisko'[/sql:1:7d7708ca46]


Lepiej, nie lepiej, potrzebowałem je "oddzielnie" (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Nie wpływa to w żaden sposób na sposób rozwiązania.


Cytat
2) czy grupowanie jest napewno zrobione dobrze?
imho powinienes zrobic grupowanie po a.firstname, a.lastname lub
(a.firstname+' '+a.lastname) w obu przypadkach?
...


Generalnie musiałem po czymś grupować, ponieważ w warunku selekcji użyłem funkcji agregującej count (bez count'a wyrzuca błąd - to na wypadek jakby ktoś pytał dlaczego musi być grupowanie).
A czy nie powiniem grupować po czymś innym (a.firstname, a.lastname, tak jak proponowałeś)? - raczej nie, bo jeśli bym grupował tak, jak piszesz, to tym razem dostanę 4 "porcje wyników" (grupowanie po imieniu z 1 zapytania, grupowanie po nazwisku z 1 zapytania, grupowanie po imieniu z 2 zapytania, grupowanie po nazwisku z 2 zapytania).
Rozwiązanie musi być gdzieś blisko, ale gdzie? (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 11:06