2011-01-12 11 views
1

Ich habe eine folgende Abfrage. Es verwendet nur eine Tabelle (Kunden) aus Northwind Datenbank. Ich habe keine Ahnung, wie es funktioniert und was seine Absicht ist. Ich hoffe, dass es viele DBAs gibt, also bitte ich um Erklärungen. insbesondere weiß nicht, was die OVER und PARTITION hier tut.Benötigen Sie Hilfe beim Verständnis einer SELECT-Abfrage

WITH NumberedWomen AS 
(
    SELECT CustomerId ,ROW_NUMBER() OVER 
      (
       PARTITION BY c.Country 
       ORDER BY LEN(c.CompanyName) ASC 
      ) 
       women 
       FROM Customers c 
) 

SELECT * FROM NumberedWomen WHERE women > 3 

Wenn Sie das DB-Schema benötigt, ist es here

+0

Was hat die Länge eines Firmennamens mit Frauen zu tun? Und wer würde sie nummerieren? – sjngm

+0

@sjngm Weiß nicht, nicht mein Code. Der Entwickler muss gelangweilt sein. –

Antwort

4

Diese Funktion:

ROW_NUMBER() OVER (PARTITION BY c.Country ORDER BY LEN(c.CompanyName) ASC) 

weist kontinuierliche Zeilennummern auf Datensätze innerhalb jeder country, durch LEN(companyName) die Datensätze zu bestellen.

Wenn Sie diese Daten:

country companyName 
US  Apple 
US  Google 
UK  BAT 
UK  BP 
US  GM 

, dann wird die Abfrage-Nummern zuweisen aus 1 und 3 die US Unternehmen und 1 zu 2-UK Unternehmen, so dass sie unter dem Namen Länge Bestellung:

country companyName ROW_NUMBER() 
US  GM   1 
US  Apple   2 
US  Google  3 
UK  BP   1 
UK  BAT   2 
+0

+1 Großartiges Beispiel –

2

ROW_NUMBER() ist eine Ranking-Funktion.

OVER erzählt es, wie man Rangnummern erstellt.

PARTITION BY[Ausdruck] erzählt die ROW_NUMBER Funktion Ranking neu zu starten, wenn [Ausdruck] einen neuen Wert enthält

In Ihrem Fall für jedes Land, eine Reihe von Zahlen, beginnend mit 1 erstellt wird. Innerhalb eines Landes sind die Firmen nach der Länge ihres Namens geordnet (kürzerer Name = niedrigerer Rang).

Die letzte Abfrage:

SELECT * FROM NumberedWomen WHERE Frauen> 3

alle Kunden außer wählt, wenn das Unternehmen Land Kombination Teil eines des Unternehmens mit den drei kürzesten Namen ist im selben Land.

+0

+1 ____________ –

Verwandte Themen