COUNT
La función COUNT tiene por misión devolver el numero de elementos de un grupo. COUNT siempre devolverá un valor numérico.
Ejemplo 1:
Script que
permita determinar el total de pasajeros registrados usando la función agregada
COUNT
SELECT COUNT(*) AS [TOTAL DE PASAJEROS]
FROM
PASAJERO
GO
FROM
PASAJERO
GO
SELECT COUNT(NOMBRES) AS [TOTAL DE
PASAJEROS]
FROM
PASAJERO
GO
En cualquiera de los casos, el resultado del script anterior seria:
Ejemplo 2:
Script que
permita determinar el total de pasajeros registrados agrupados por su país,
tenga en cuenta que las columnas a mostrar son: NOMBRE DEL PAIS, TOTAL DE
PASAJEROS usando a función agregada COUNT
así como las GROUP BY y JOIN
SELECT PAI.PAIS AS [PAIS], COUNT (PAS.IDPAIS) AS [TOTAL
PASAJEROS]
FROM PASAJERO PAS
INNER JOIN PAIS PAI ON PAS.IDPAIS = PAI.IDPAIS
GROUP BY PAI.PAIS
GO
En el script se define la primera columna con el nombre del país que se encuentra en la tabla PAIS, por tanto se tiene que añadir un INNER JOIN con la especificación de la tabla PAIS, el conteo se realiza al operador IDPAIS de la tabla PASAJERO en la clausa GROUP BY. En la imagen siguiente se muestra como sería el resultado de la consulta
Podríamos modificar el script anterior proponiendo que solo se muestren los países que superen en 1 la cantidad de pasajeros, para eso utilizaremos la clausula HAVING que nos permite especificar una condición a partir de un agrupamiento, quedaría así:
SELECT PAI.PAIS AS [PAIS], COUNT (PAS.IDPAIS) AS [TOTAL
PASAJEROS]
FROM PASAJERO PAS
INNER JOIN PAIS PAI ON PAS.IDPAIS = PAI.IDPAIS
GROUP BY PAI.PAIS
HAVING COUNT(PAI.PAIS)>1
GO
El resultado se muestra a continuación:
Ejemplo 3:
Script que
permita mostrar el total de países que aún no tienen un pasajero registrado
utilizando LEFT JOIN, RIGHT JOIN y
la función agregada COUNT
SELECT COUNT(*) AS [TOTAL PAISES]
FROM PASAJERO PAS
RIGHT JOIN PAIS PAI ON PAS.IDPAIS = PAI.IDPAIS
WHERE PAS.IDPASAJERO IS NULL
GO
En el script anterior se usa la clausula RIGHT JOIN para filtrar los países que aun no han sido asignados a ningún pasajero. En el siguiente script se muestra la misma implementación esta vez usando el LEFT JOIN
SELECT COUNT (*) AS [TOTAL DE PAISES]
FROM PASAJERO PAS
RIGHT JOIN PAIS PAI ON PAS.IDPAIS = PAI.IDPAIS
WHERE PAS.IDPASAJERO IS NULL
GO
En ambos casos, el resultado es e 6 países que no tienen asignado pasajero.
Ejemplo 4:
Script que
permita mostrar el total de pasajeros y el monto acumulado de pagos de un
determinado país
SELECT PAI.PAIS AS [PAIS], COUNT (DISTINCT PAS.NOMBRES) AS [TOTAL PASAJEROS],
SUM(MONTO) AS [MONTO
ACUMULADO]
FROM PASAJERO PAS
INNER JOIN PAIS PAI ON PAS.IDPAIS=PAI.IDPAIS
INNER JOIN PAGO PAG ON PAS.IDPASAJERO = PAG.IDPASAJERO
GROUP BY PAI.PAIS
GO
La imagen siguiente muestra el resultado de la consulta:
En la caso de BRASIL se especifica que solo hay un pasajero registrado y el monto acumulado por él es de 3400. Si observa PERU notará que tiene un total de 3 pasajeros y que entre ellos acumulan un valor de 6200
Ejemplo 5:
Script que
permita mostrar la cantidad de pasajeros asignado por cada país y aquellos
países que aún no registran pasajero alguno asignar el valor 0
SELECT PAI.PAIS, COUNT(*) AS [TOTAL
PASAJEROS]
FROM PASAJERO PAS
RIGHT JOIN PAIS PAI ON PAS.IDPAIS = PAI.IDPAIS
WHERE PAS.IDPASAJERO IS NOT NULL
GROUP BY PAI.PAIS
UNION
SELECT PAI.PAIS, 0 AS [TOTAL
PASAJEROS]
FROM PASAJERO PAS
RIGHT JOIN PAIS PAI ON PAS.IDPAIS = PAI.IDPAIS
WHERE PAS.IDPASAJERO IS NULL
GROUP BY PAI.PAIS
GO
En el script hacemos uso del operador UNION que permitirá unir dos conjuntos de registros con la misma cantidad de columnas. Para asignar con cero a la columna Total de Pasajeros de aquellos países que no registran un pasajero es directamente sobre la consulta SELECT PAI.PAIS, 0 as [TOTAL PASAJEROS] solo si el IDPASAJERO de la tabla PASAJERO es nulo
La ejecución del script da como resultado lo que se muestra en la siguiente imagen:
Hasta aquí el post queridos lectores, espero les haya sido de utilidad, espero comenten, compartan, den +1 o por lo menos le den clic a algún anuncio que les sea de interés. Que tengan buena tarde
¡Saludos!
No hay comentarios.:
Publicar un comentario