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

Cómo devolver el número de filas en un resultado de consulta en SQL Server

Cuando se trabaja con bases de datos, a veces desea averiguar cuántas filas devolverá una consulta, sin devolver realmente los resultados de la consulta. O, a veces, es posible que desee averiguar cuántas filas hay en una tabla determinada.

En SQL Server, puede usar COUNT() de T-SQL función para devolver el número de filas que se devolverían en una consulta.

Los datos

Estos son los datos que usaremos en los ejemplos de esta página:

SELECT *
FROM Tasks;

Resultado:

TaskId  TaskName      TaskDescription  TaskCode
------  ------------  ---------------  --------
1       Feed cats     TBA              null    
2       Water dog     TBA              null    
3       Feed garden   TBA              null    
4       Paint carpet  TBA              null    
5       Clean roof    TBA              null    
6       Feed cats     TBA              null    

Ejemplo:contar todas las filas de una tabla

Aquí hay un ejemplo del uso de COUNT() función para devolver el número total de filas en una tabla:

SELECT COUNT(*)
FROM Tasks;

Resultado:

6  

Esto devuelve el número de filas en la tabla porque no proporcionamos ningún criterio para reducir los resultados.

Ejemplo:agregar criterios

Aquí hay un ejemplo de contar cuántas filas se devolverían según un criterio dado:

SELECT COUNT(*)
FROM Tasks
WHERE TaskName LIKE '%dog%' 
OR TaskName LIKE '%cat%';

Resultado:

3

Ejemplo:especifique una sola columna

Todos los ejemplos anteriores usan un asterisco para aplicar el conteo a todas las columnas. También tiene la opción de especificar una columna específica.

Ejemplo:

SELECT COUNT(TaskName)
FROM Tasks;

Resultado:

6  

Si bien este ejemplo devuelve el mismo resultado que obtuvimos cuando usamos el asterisco, ese no siempre será necesariamente el caso. Por ejemplo, esto es lo que sucede si especificamos una columna diferente:

SELECT COUNT(TaskCode)
FROM Tasks;

Resultado:

0

En este caso obtenemos cero, porque esa columna en particular contiene valores nulos en cada fila.

Ejemplo:Distinto

Puede agregar el DISTINCT argumento para devolver solo el número de valores únicos (no nulos).

Es posible que haya notado que cada fila en nuestro TaskDescription columna contiene el mismo valor ("TBA"). Y el TaskName La columna también tiene un valor duplicado ("Alimentar gatos" aparece dos veces). Esto podría causar problemas si no desea que se cuenten los duplicados.

Así es como se ve si aplicamos DISTINCT argumento al TaskName columna:

SELECT COUNT(DISTINCT TaskName)
FROM Tasks;

Resultado:

5

Y aquí se aplica contra TaskDescription tabla (donde todos los valores son idénticos):

SELECT COUNT(DISTINCT TaskDescription)
FROM Tasks;

Resultado:

1

Ejemplo:la cláusula HAVING

También puede usar COUNT() con el HAVING cláusula para limitar un conjunto de resultados en función del número de filas que se devolverían.

Ejemplo:

USE Music;
SELECT ar.ArtistName,   
       COUNT(al.AlbumName) 'Album Count'
FROM Artists ar
INNER JOIN Albums al 
ON ar.ArtistId = al.ArtistId
GROUP BY ar.ArtistName
HAVING COUNT(al.AlbumName) > 1;

Resultado:

ArtistName                 Album Count
-------------------------  -----------
Allan Holdsworth           2          
Devin Townsend             3          
Iron Maiden                5          
Michael Learns to Rock     3          
Tom Jones                  3

Este ejemplo utiliza una base de datos diferente a los ejemplos anteriores. Devuelve solo aquellos artistas que han lanzado más de 1 álbum. Podríamos cambiar ese número cuantos álbumes queramos:

USE Music;
SELECT ar.ArtistName,   
       COUNT(al.AlbumName) 'Album Count'
FROM Artists ar
INNER JOIN Albums al 
ON ar.ArtistId = al.ArtistId
GROUP BY ar.ArtistName
HAVING COUNT(al.AlbumName) > 4;

Resultado:

ArtistName                 Album Count
-------------------------  -----------
Iron Maiden                5

La función COUNT_BIG()

T-SQL también tiene un COUNT_BIG() función que funciona exactamente como COUNT() , excepto que COUNT() devuelve un int tipo de datos y COUNT_BIG() devuelve un bigint tipo de datos.

Esta función puede ser útil para vistas indexadas con consultas agrupadas. Puede encontrar si intenta crear un índice para una vista que contiene COUNT(*) , que recibe un error como este:

Cannot create index on view "Music.dbo.AlbumsByArtist" because it uses the aggregate COUNT. Use COUNT_BIG instead.

En tales casos, alterar la vista para usar COUNT_BIG(*) debería resolver el problema.