2016-03-25 19 views
2

Grundsätzlich arbeite ich an einem Dashboard auf HighCharts Säulendiagramm, um die Anzahl der Mitarbeiter in einer Region darzustellen, und wenn ich auf die Spalte dieser Region klicken, sollte es einen Drilldown und zeigen Anzahl der Beschäftigten in allen Bezirken dieser Region. Die Tabelle employee ist mit der Tabelle District verbunden und die Tabelle District ist mit der Tabelle Region verbunden.Abfrage für die Anzahl der Mitarbeiter in Bezirk und Region

enter image description here

Ich habe die folgende Abfrage versucht

SELECT ad.DISTRICT_NAME, COUNT(me.district_id), r.REGION_NAME, COUNT(me.district_id) 
FROM `master_employee` me 
INNER JOIN app_district ad ON me.`district_id` = ad.`DISTRICT_UID` 
INNER JOIN region r ON ad.REGION_UID = r.REGION_UID 
GROUP BY me.district_id, ad.REGION_UID 

Aber es zeigt die Anzahl der Mitarbeiter in einem Kreis. Wie kann ich sie gruppieren und die Anzahl der Mitarbeiter in einer Region ermitteln?

Fiddle

http://www.sqlfiddle.com/#!9/ec468c/1

+2

Wenn Sie möchten, sollten Sie im Anschluss an diese einfachen zweistufigen Vorgehensweise: 1. Wenn Sie nicht bereits getan haben, eine ordnungsgemäße und CREATE INSERT-Anweisungen (und/oder ein sqlfiddle), damit wir das Problem leichter replizieren können. 2. Wenn Sie dies noch nicht getan haben, geben Sie eine gewünschte Ergebnismenge ein, die den Informationen aus Schritt 1 entspricht. – Strawberry

+1

Also habe ich Ihren Code umformatiert @memdoudmemon - was bemerken Sie ** über die letzte Zeile ** ?? – Hogan

+0

Ich habe die Geige hinzugefügt. – sunny93

Antwort

2

Haben Sie darüber nachgedacht, GROUP BY mit ROLLUP Verwendung einer zusätzlichen Zeile für jede Region zu schaffen, in dem der Name des Districts wäre NULL und die Zählung würde die Aufzählung der Distrikte für diese Region ergeben?

Diese SQL sollte Sie mit meinem Gedankengang in die richtige Richtung zeigen. Ich mit Fiddle spielte, schien es zu nähern, was Sie fragen:

SELECT r.Region_Name 
    , ad.District_Name 
    , Count(me.employee_id) 
    FROM `master_employee` me 
INNER JOIN app_district ad 
     ON me.`district_id` = ad.`DISTRICT_UID` 
INNER JOIN region r 
     ON ad.REGION_UID = r.REGION_UID 
GROUP BY ad.REGION_UID, ad.District_Name WITH ROLLUP 
+0

WOW wusste nichts über ROLLUP. Vielen Dank !! – sunny93

+0

Aber was ist mit der letzten Zeile im Ergebnis? Es zeigt den Namen der Region an und zählt alle Datensätze. Wie können wir das stoppen? – sunny93

+0

Ich sah das und wusste nicht, ob das ein SQL Fiddle Verhalten oder ein MySQL Verhalten war. Ich habe keine MySQL-Instanz zum Testen zur Hand. –

1

Sie eine Gruppe von Region verwenden sollten

SELECT r.REGION_NAME, COUNT(*) as number_of_employee 
FROM `master_employee` me 
INNER JOIN app_district ad ON me.`district_id` = ad.`DISTRICT_UID` 
INNER JOIN region r ON ad.REGION_UID = r.REGION_UID 
GROUP BY ad.REGION_UID 
+0

Danke. Aber gibt es eine Möglichkeit, beide Ergebnisse in derselben Abfrage zu erhalten. Ich meine Anzahl der Mitarbeiter in der Region und Anzahl der Mitarbeiter im Bezirk? – sunny93

+0

Ich denke nicht in SQL (auf nicht in einfacher Weise), weil die Ebene der Aggregation ist anders .. die Bezirksebene ist detaillierter der Regionsebene. Andernfalls können Sie beide Ergebnisse nicht mit einer serverseitigen Sprache abrufen. – scaisEdge

Verwandte Themen