2016-05-04 15 views
1

Ich versuche eine MySQL-Abfrage zu schreiben, um zu sehen, welche Postleitzahlen am häufigsten für unsere Kunden kommen und Hilfe bei der Fertigstellung benötigen. Die Büro Feld am Ende meiner Select-Anweisung kann sowieso von 1 bis 10 Möglichkeiten pro Postleitzahl sein.MySQL Query Häufigkeit der Postleitzahlen pro Büros

Wie würde ich diese Abfrage beheben, um mir die häufigsten Postleitzahlen zu erhalten und welche der 10 möglichen Büros haben einen Ort in dieser Postleitzahl?

SELECT SUBSTRING(zip_code, 1, 5) AS zip, 
COUNT(*) AS freq, office 
FROM customer_billing 
WHERE status != 'deleted' 
GROUP BY zip 
ORDER BY freq DESC 

Beispielausgabe für das, was ich suche:

zip  freq  office 
---- ----  ---- 
92101 450  office_A, office_B 
02124 300  office_A, office_C, office_D 
07713 110  office_B 

Antwort

1

Verwenden GROUP_CONCAT zusammen mit DISTINCT. Die Verwendung von DISTINCT ist erforderlich, da ein bestimmtes Büro für eine bestimmte Postleitzahl mehrmals vorkommen kann.

SELECT SUBSTRING(zip_code, 1, 5), COUNT(*) AS freq, 
    GROUP_CONCAT(DISTINCT office ORDER BY office DESC SEPARATOR ',') 
FROM customer_billing 
WHERE status != 'deleted' 
GROUP BY SUBSTRING(zip_code, 1, 5) 
ORDER BY freq DESC 
+1

Perfect! Vielen Dank! –

1

können Sie group_concat

verwenden Diese Funktion gibt aus einer Gruppe mit den verketteten Nicht-NULL Werte eine Zeichenfolge zur Folge haben. Es gibt NULL zurück, wenn keine Nicht-NULL-Werte vorhanden sind. Die vollständige Syntax lautet wie folgt:

SELECT SUBSTRING(zip_code, 1, 5) AS zip, 
COUNT(*) AS freq, GROUP_CONCAT(office) 
FROM customer_billing 
WHERE status != 'deleted' 
GROUP BY zip 
ORDER BY freq DESC