Muszę napisać zapytanie, które zwróci nazwę firmy i liczbę poszczególnych zleceń pracy, które firma ma.
W tej chwili moje zapytanie jest takie:
SELECT c.name, cj.joborder_id
FROM company c, joborder jo, candidate_joborder cj
WHERE c.company_id=jo.company_id
AND jo.joborder_id=cj.joborder_id
AND jo.status = "Active"
AND cj.status=700;
Zwraca następującą tabelę:
Name | Job Order ID
X | 1874
Y | 2003
Y | 2003
Z | 2001
To, czego chcę, to:
Name | Count
X | 1
Y | 2
Z | 1
Czy ktoś może mi w tym pomóc?
Dzięki
Odpowiedzi:
2 dla odpowiedzi № 1Zapytanie, które chcesz, jest następujące:
SELECT c.name,
count(cj.joborder_id)
FROM company c,
joborder jo,
candidate_joborder cj
WHERE c.company_id=jo.company_id
AND jo.joborder_id=cj.joborder_id
AND jo.status = "Active"
AND cj.status=700
GROUP BY c.name;
Sugeruję następujące odwołania do agregacji SQL, a konkretnie grupowanie według i liczenie:
- http://www.youtube.com/watch?v=fSH1jpV2nNs
- http://www.w3resource.com/sql/aggregate-functions/count-with-group-by.php
2 dla odpowiedzi nr 2
posługiwać się COUNT()
i GROUP BY
klauzula,
SELECT c.name, COUNT(cj.joborder_id) TotalCount
FROM company c, joborder jo, candidate_joborder cj
WHERE c.company_id=jo.company_id
AND jo.joborder_id=cj.joborder_id
AND jo.status = "Active"
AND cj.status=700
GROUP BY c.name
za pomocą ANSI JOIN
SELECT c.name,
COUNT(cj.joborder_id) TotalCount
FROM company c
INNER JOIN joborder jo
ON c.company_id = jo.company_id
INNER JOIN candidate_joborder cj
ON jo.joborder_id = cj.joborder_id
WHERE jo.status = "Active" AND
cj.status=700
GROUP BY c.name
1 dla odpowiedzi nr 3
SELECT DISTINCT(c.name), COUNT(cj.joborder_id)
FROM company c, joborder jo, candidate_joborder cj
WHERE c.company_id=jo.company_id
AND jo.joborder_id=cj.joborder_id
AND jo.status = "Active"
AND cj.status=700
GROUP BY c.name