![]() |
![]() |
![]()
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. |
|
|
![]() |
![]()
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) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 11:06 |