Ich muss eine Abfrage schreiben, die den Namen des Unternehmens und die Nummer der bestimmten Auftragsbestätigungen des Unternehmens zurückgibt.
Im Moment sieht meine Abfrage so aus:
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;
Dies gibt die folgende Tabelle zurück:
Name | Job Order ID
X | 1874
Y | 2003
Y | 2003
Z | 2001
Was ich will ist:
Name | Count
X | 1
Y | 2
Z | 1
Kann mir jemand dabei helfen?
Vielen Dank
Antworten:
2 für die Antwort № 1Die gewünschte Abfrage lautet wie folgt:
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;
Ich würde die folgenden Referenzen für die SQL-Aggregation vorschlagen und speziell gruppieren nach und zählen:
- http://www.youtube.com/watch?v=fSH1jpV2nNs
- http://www.w3resource.com/sql/aggregate-functions/count-with-group-by.php
2 für die Antwort № 2
benutzen COUNT()
und GROUP BY
Klausel,
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
verwenden 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 für die Antwort № 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