Regionale Verteilung von Kunden und Bestellungen

Die nachfolgende Abfrage untersucht die regionale Verteilung von Kunden und Bestellungen. Regionen werden nach den ersten n Stellen der Postleitzahl zusammengefasst, wobei n in der zweiten Zeile angegeben werden kann:

SELECT
    CONCAT(LEFT(postcode, @n:=3),'*') AS region,
    COUNT(entity_id) AS order_count,
    COUNT(DISTINCT email) AS customer_count,
    GROUP_CONCAT(DISTINCT city) AS city_list
FROM sales_flat_order_address
WHERE address_type = 'shipping'
GROUP BY LEFT(postcode, @n)
ORDER BY customer_count DESC
LIMIT 50;

Die eigentliche regionale Gruppierung findet in Zeile 8 statt. Hier wird die in Zeile 2 gesetzte Benutzervariable n verwendet. Je kleiner n, desto größer die Gruppe. Zur besseren Zuordnung der Region werden in der zusätzlichen Spalte die Städte aufgelistet.

Die Kunden werden anhand der E-Mail-Adresse identifiziert, damit Gastbestellungen mitberücksichtigt werden.

Möchte man die Daten auf einen bestimmten Monat und Jahr beschränken, um beispielsweise die Auswirkungen einer lokalen Werbemaßnahme zu analysieren, kommt man in diesem Fall nicht ohne eine Verbundabfrage weiter:

SELECT
    CONCAT(LEFT(postcode, @n:=2),'*') AS region,
    COUNT(a.entity_id) AS order_count,
    COUNT(DISTINCT email) AS customer_count,
    GROUP_CONCAT(DISTINCT city) AS city_list
FROM sales_flat_order_address a
JOIN sales_flat_order p ON a.parent_id = p.entity_id
  AND status = 'complete'
WHERE address_type = 'shipping'
  AND YEAR(created_at) = 2012
  AND MONTH(created_at) = 1
GROUP BY LEFT(postcode, @n)
ORDER BY customer_count DESC
LIMIT 50;

Die Verbundabfrage verwendet in diesem Fall indizierte Spalten, sodass eine schnelle Verarbeitung und damit kaum Auslastung für den Live-Shop zu erwarten ist.

Um die Abfrage so einfach wie möglich zu halten, wurde auf die Filterung von Bestellungen mit dem Status Vollständig in der ersten Abfrage verzichtet. Da in der zweiten Abfrage zwecks Filterung eines bestimmten Zeitraums die Spalte status zur Verfügung steht, werden zusätzlich nur Bestellungen berücksichtigt, die den Status Vollständig haben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.