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
durzy
post
Post #2





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 19.11.2003
Skąd: Wawa

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


szkoda ze nie napisales pod czym piszesz te zapytania. wnioskuje ze srednikow znajdujacych sie w kodzie ze jest to (chyba) mysql.

ja pracuje na mssql i Twoj problem mozna na tym rozwiazac bardzo szybko poprzez takie zapytanie:
[sql:1:0fb472fd77]
SELECT t.firstname, t.lastname, sum(t.liczba) 'Liczba produktow + umow'
FROM (SELECT a.firstname, a.lastname, count(f.agent_id) 'Liczba'
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.firstname, a.lastname,a.agent_id
UNION
SELECT a.firstname, a.lastname, count(p.agent_id) 'Liczba'
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.firstname, a.lastname,a.agent_id
) t
GROUP BY t.firstname, t.lastname
ORDER BY 3 desc, 1
[/sql:1:0fb472fd77]

wydaje mi sie ze mysql obsluguje juz podzapytania. jesli nie to chyba bedziesz jednak musial to rozbic na 2 select'y

Pozdrawiam
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 - 14:57