Ejemplo Nº 042 – Hallando el promedio de una columna

1 comentario

Si queremos obtener el promedio (o sea, la suma total dividida por la cantidad) entonces empleamos la función AVG(). Las siglas AVG significan “average”, lo cual traducido al castellano significa “promedio”.

SELECT
   COB_CODCLI,
   AVG(COB_MONTOX)
FROM
   COBRANZAS
GROUP BY
   COB_CODCLI

Podemos mejorar este SELECT para que sea más descriptivo de la siguiente manera:

SELECT
   COB_CODCLI,
   SUM(COB_MONTOX) AS TOTALCOBRADO,
   COUNT(*)        AS CANTIDAD,
   AVG(COB_MONTOX) AS PROMEDIO
FROM
   COBRANZAS
GROUP BY
   COB_CODCLI

La ventaja de hacerlo así es que para cada cliente tendremos:

  • El monto total que se le cobró
  • La cantidad de cobranzas realizadas
  • El promedio cobrado

Además, como las columnas tienen alias es más fácil identificarlas.

IMPORTANTE: La función AVG() no considera a las filas que tienen nulos, para ella esas filas no existen.

 

.

Ejemplo Nº 041 – Sumando los valores de una columna

1 comentario

Es muy frecuente que debamos sumar los valores de una columna para hallar el total de esa columna. Lo podemos conseguir rápidamente usando la función SUM().

SELECT
   COB_CODCLI,
   SUM(COB_MONTOX)
FROM
   COBRANZAS
GROUP BY
   COB_CODCLI

Este SELECT nos mostrará dos columnas: en la primera el código de cada cliente y en la segunda el total que se le cobró a ese cliente. O sea que si a un cliente se le cobró en cuatro oportunidades, mostrará la suma de esos cuatro cobros.

 

.

 

Ejemplo Nº 040 – Poniendo condiciones (filtros) a los datos agrupados

1 comentario

Cuando usamos datos en bruto las condiciones de cuales datos queremos obtener las colocamos a continuación de la cláusula WHERE. Sin embargo, no podemos hacer eso mismo con los datos agrupados ya que escribir algo como esto:

SELECT
   PRD_PROCED,
   COUNT(*)
FROM
   PRODUCTOS
WHERE
   COUNT(*) >= 10
GROUP BY
   PRD_PROCED

generará un error ¿por qué? Porque la cláusula GROUP BY siempre se debe escribir después que la cláusula WHERE y por lo tanto el Firebird aún no conoce el valor de COUNT(*) cuando está en la cláusula WHERE.

¿Cuál es la solución a este problema? Usar la cláusula HAVING, la cual pone condiciones a los datos agrupados. Así como la cláusula WHERE pone condiciones a los datos en bruto, la cláusula HAVING pone condiciones a los datos agrupados. Y así como WHERE se usa después que las columnas, HAVING se usa después que GROUP BY.

SELECT
   PRD_PROCED,
   COUNT(*)
FROM
   PRODUCTOS
GROUP BY
   PRD_PROCED
HAVING
   COUNT(*) >= 10

Cuando el Firebird encuentra la cláusula HAVING ya conoce el valor de COUNT(*) y por lo tanto puede filtrar los datos.

.

Ejemplo Nº 039 – Agrupando datos y contándolos

1 comentario

En el ejemplo anterior pudimos conocer los países de procedencia de nuestros productos, pero no sabíamos cuantos hay de cada país.

SELECT
   PRD_PROCED,
   COUNT(*)
FROM
   PRODUCTOS
GROUP BY
   PRD_PROCED

La función agregada COUNT(*) nos devuelve la cantidad de filas que hay en cada uno de los grupos y el asterisco le dice al Servidor que cuente todo lo que está en cada grupo.

Como en este caso las filas se agrupan según la columna PRD_PROCED entonces obtenemos la cantidad de filas que corresponden a cada país.

.

Ejemplo Nº 038 – Agrupando datos

1 comentario

Muchas veces no quieres ver los datos en bruto sino que los quieres tener agrupados por alguna condición. Para eso sirve la cláusula GROUP BY.

Por ejemplo, para conocer todos los países de procedencia de nuestros productos:

SELECT
   PRD_PROCED
FROM
   PRODUCTOS
GROUP BY
   PRD_PROCED

La consulta de arriba te mostrará los nombres de todos los países de los cuales proceden los productos que tienes en tu stock.

 

 

.