Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So erhalten Sie zufällige Zeilen aus der SQL Server-Tabelle - SQL Server / TSQL-Tutorial Teil 117

Szenario:

Sie arbeiten als SQL Server Entwickler. Sie werden gebeten, zufällige Beispieldaten aus der Tabelle dbo.Customer bereitzustellen. Möglicherweise werden Sie aufgefordert, 100 zufällige Zeilen oder einen bestimmten Prozentsatz der Gesamtdaten aus der Tabelle bereitzustellen. Welche Abfrage werden Sie verwenden, um die erforderliche Ausgabe bereitzustellen?

Lösung:

Im vorherigen Beitrag haben wir gelernt, wie man die obersten n Zeilen aus der Tabelle erhält. Wir können entweder die Anzahl der Zeilen oder den Prozentsatz der Datensätze angeben, die wir aus einer Tabelle erhalten möchten, indem wir TOP in unserer Auswahlabfrage verwenden.

Wir können dieselbe Top-Klausel verwenden, aber da wir aufgefordert werden, die zufälligen Datensätze bereitzustellen , müssen wir sie zuerst zufällig sortieren. Wir können die newid()-Funktion in order by Klausel verwenden, um sie zufällig zu sortieren.

Lassen Sie uns eine dbo.Customer-Tabelle mit einigen Beispieldaten erstellen.

Create table dbo.Customer
 (Id int,
  FName VARCHAR(50),
  LName VARCHAR(50),
  CountryShortName CHAR(2))
GO
insert into dbo.Customer
Values (
1,'Raza','M','PK'),
(2,'Rita','John','US'),
(3,'Sukhi','Singh',Null),
(4,'James','Smith','CA'),
(5,'Robert','Ladson','US'),
(6,'Alice','John','US')
 
 
 1) Verwenden Sie NewID ( ) in Order by, um zufällige Datensätze zu erhalten
Nehmen wir an, wenn wir daran interessiert sind, 3 zufällige Datensätze aus der dbo.Customer-Tabelle zu erhalten, können wir die folgende Abfrage verwenden.

Select top 3 * From dbo.Customer
order by NEWID()
 
 
So erhalten Sie zufällige Datensätze aus der SQL Server-Tabelle - SQL Server / TSQL-Tutorial
 Sie können auch Prozent verwenden, wenn Sie möchten, wie unten gezeigt

Select top 30 percent * From dbo.Customer
order by NEWID()
 
Wie man zufällige Datensätze aus der SQL Server-Tabelle erhält, indem man Top Percent mit NewID() verwendet - SQL Server / TSQL Tutorial

2) Durch die Verwendung von TABLESAMPLE SYSTEM
Gemäß Microsoft Books Online „TABLESAMPLE SYSTEM gibt einen ungefähren Prozentsatz der Zeilen zurück und generiert einen Zufallswert für jede physische 8-KB-Seite in der Tabelle. Basierend auf dem Zufallswert für eine Seite und dem in der Abfrage angegebenen Prozentsatz, eine Seite ist entweder in der Stichprobe enthalten oder ausgeschlossen. Jede enthaltene Seite gibt alle Zeilen in der Stichprobenergebnismenge zurück."

Hier können Sie verstehen, dass Sie, wenn Sie eine kleine Tabelle mit wenigen Seiten haben, Möglicherweise möchten Sie TableSample nicht verwenden, da es die gesamte Seite ein- oder ausschließt. Bei wenigen Datensätzen in der Tabelle möchten Sie möglicherweise Methode 1 verwenden, und für große Tabellen können Sie TableSample verwenden.

Wenn ich die folgende Abfrage auf meiner dbo.Customer-Tabelle ausführen würde, erhalte ich manchmal keine Datensätze und Beim Abrufen der Datensätze werden alle Datensätze so zurückgegeben, wie sie auf einer einzelnen Seite platziert sind.

Select * From dbo.Customer tablesample (30 percent)
 Sie können auch die gewünschten Zeilen mit Tabellenbeispiel verwenden, wie unten gezeigt. Die zurückgegebenen Zeilen können variieren. Sie können sie einschränken, indem Sie die oberen n in der ausgewählten Abfrage verwenden.


Select * From dbo.Customer tablesample (2 rows)

Als ich die obige Abfrage auf der dbo.Customer-Tabelle mit insgesamt 6 Zeilen ausgeführt habe. Es hat mir entweder keine oder alle sechs Zeilen zurückgegeben.

Wenn Sie einschränken möchten, können Sie die folgende Abfrage verwenden. Noch einmal, ich schlage vor, TableSample mit großen Tabellen zu verwenden, wenn Sie Daten auf mehreren Datenseiten haben.

Select top 2 * From dbo.Customer tablesample (2 rows)