sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo obtener filas aleatorias de la tabla de SQL Server - Tutorial de SQL Server / TSQL, parte 117

Escenario:

Estás trabajando como desarrollador de SQL Server. Se le pide que proporcione datos aleatorios de muestra de la tabla dbo.Customer. Es posible que se le solicite proporcionar 100 filas aleatorias o algún porcentaje de los datos totales de la tabla. ¿Qué consulta utilizará para proporcionar el resultado requerido?

Solución:

En la publicación anterior, aprendimos cómo obtener las primeras n filas de la tabla. Podemos proporcionar el recuento de filas o el porcentaje de registros que queremos obtener de una tabla usando TOP en nuestra consulta de selección.

Podemos usar la misma cláusula Top pero se nos pide que proporcionemos registros aleatorios , necesitamos ordenarlos aleatoriamente primero. Podemos usar la función newid() en orden por cláusula para clasificarlos aleatoriamente.

Vamos a crear una tabla dbo.Customer con algunos datos de muestra.

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) use NewID ( ) en Order by para obtener registros aleatorios
Digamos que si estamos interesados ​​en obtener 3 registros aleatorios de la tabla dbo.Customer, podemos usar la siguiente consulta.

Select top 3 * From dbo.Customer
order by NEWID()
 
 
Cómo obtener registros aleatorios de la tabla de SQL Server - Tutorial de SQL Server / TSQL
 también puede usar el porcentaje si lo desea, como se muestra a continuación

Select top 30 percent * From dbo.Customer
order by NEWID()
 
Cómo obtener registros aleatorios de la tabla de SQL Server utilizando el porcentaje superior con NewID() - Tutorial de SQL Server / TSQL

2) Usando TABLESAMPLE SYSTEM
Según Microsoft Books Online "TABLESAMPLE SYSTEM devuelve un porcentaje aproximado de filas y genera un valor aleatorio para cada página física de 8 KB en la tabla. Según el valor aleatorio de una página y el porcentaje especificado en la consulta, una página se incluye en la muestra o se excluye. Cada página que se incluye devuelve todas las filas en el conjunto de resultados de la muestra".

Desde aquí, puede comprender que si tiene una tabla pequeña con pocas páginas, es posible que no desee utilizar TableSample, ya que incluirá o excluirá toda la página. Con pocos registros en la tabla, es posible que desee usar el método 1 y para tablas grandes puede usar TableSample.

Si ejecuto la consulta a continuación en mi tabla dbo.Customer, en algún momento no obtendré registros y cuando obtenga los registros, devolverá todos los registros tal como están colocados en una sola página.

Select * From dbo.Customer tablesample (30 percent)
 También puede usar las Filas que desee con el ejemplo de tabla como se muestra a continuación. Las filas devueltas pueden variar. puede limitarlos utilizando top n en la consulta de selección.


Select * From dbo.Customer tablesample (2 rows)

Cuando ejecuté la consulta anterior en la tabla dbo.Customer con un total de 6 filas. No me devolvió ninguna fila o las seis.

Si desea limitar, puede usar la consulta a continuación. Una vez más, sugeriré usar TableSample con una tabla grande en la que tenga datos en varias páginas de datos.

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