Publicado el 2 comentarios

SQL básico. Funciones para resumir datos (summarize).

SQL cuenta con funciones que permiten resumir en un sólo dato los valores de una columna de todas o algunas de las filas de una tabla. A estas funciones se les conoce como funciones de agregación (“aggregate functions” en inglés). Para hacer las siguientes prácticas, vamos a abrir y a usar la base de datos que hemos estado usando en este curso básico y nuestro archivo de scripts sql.

Funciones SQL de agregación.

Las funciones de agregación trabajan con un conjunto de valores de una columna y regresan un sólo valor. Casi todas ellas ignoran los valores NULOS (null) a excepción de una función que veremos enseguida. Cada motor de base de datos implementan sus propias funciones de agregación y su propia sintaxis, veremos las más comunes entre las distintos motores y que la implementa SQLite.

Función SQL de agregación COUNT()

Esta función cuanta o regresa el número de elementos que existen en un grupo de datos, de acuerdo a la sintaxis empleada, puede incluir los elemento con valor NULO (null) o no. Veamos estas dos diferentes sintaxis:

Sintaxis: COUNT(*) o COUNT([DISTINCT] expresión)

Los corchetes, en la sintaxis, se refiere a que la palabra que contiene es opcional, puede o no puede escribirse. Si se escribe la palabra reservada DISTINCT, la función COUNT() sólo contará los elementos con valores distintos, ignorará los valores duplicados.

Cuando se usa el asterisco (*) la función cuenta todas los filas aún cuando sus elementos tengan valor NULO (null). Cuando se usa una expresión, que por lo general es un nombre de una columna o campo o alias, sólo contará aquellos elementos que tengan valores distintos a NULO. Veamos un ejemplo:

Función COUNT().

El primer uso de la función COUNT(*) regresa un número que representa el total de filas de la tabla “productos” mientras que COUNT(id_marca) regresa el total de valores no nulos que tiene el campo id_marca. En este caso, los resultados son iguales, ambas funciones regresan el número 14,767.

Vamos a actualizar una fila de la tabla “productos” poniendo el valor nulo a la columna id_marca a la fila con el valor 2 en id_producto. Para eso ejecuta la siguiente sentencia:

Actualiza campo a nulo de una fila.

Vuelve a ejecutar la sentencia COUNT() inicial:

Función COUNT() con valores nulos.

Ahora los resultados de ambas funciones COUNT() son diferentes. ¿Por qué? Porque como dijimos antes, COUNT(*) cuanta el total de fila del grupo, en este caso de toda la tabla y, COUNT(id_marca) cuenta los valores no nulos del campo id_marca. Y ya existe un valor nulo en ese campo con ls sentencia UPDATE que ejecutamos anteriormente.

Si a la sentencia SELECT le agregamos un filtro o condición a través de la cláusula WHERE las funciones COUNT() sólo se limitarán a contar las filas o elementos de ese grupo. Veamos un ejemplo:

Función COUNT() con WHERE.

La sentencia anterior limita las filas a sólo aquellas que su marca sea igual a 34. Las funciones COUNT() se limita a contar solo las filas que cumplan con esa condición. en ese caso, el resultado de ambas funciones es 93, debido a que dentro de los productos con marca igual a 34 no hay valores nulos en su campo id_categoria.

Ahora incluiremos la palabra reservada DISTINCT dentro de la función COUNT(). Veamos el ejemplo:

Contando valores distintos.

En la segunda forma de la función COUNT() que incluye la palabra DISTINCT sólo cuenta los valores distintos de la columna id_marca que existen en la tabla “productos”. Quiere decir que de los 14,766 valores no nulos que contiene la columna id_marca sólo hay 249 valores distintos.

Funciones SQL de agregación AVG(), MAX(), MIN() y SUM().

Las funciones de agregación AVG() y SUM() sólo aceptan expresiones numéricas, MAX() y MIN() aceptan tanto expresiones de texto como numéricas.

Sintaxis: AVG(expresion-numérica), SUM(expresión-numérica), MAX(expresión), MIN(expresión)

La función AVG() obtiene el promedio de los valores de una columna. SUM(), MAX() y MIN() obtienen la suma, el valor máximo, y valor mínimo de los valores de una columna respectivamente. Estás funciones sólo tomarán en cuanta los valores no nulos. Al igual que la función COUNT(), estas funciones aplican sobre un grupo de filas o toda la tabla si la sentencia SELECT tiene o no tiene una condición o filtro. Veamos el siguiente ejemplo:

Funciones AVG(), MAX(), MIN() y SUM().

En el ejemplo anterior obtenemos el promedio, valor máximo, valor mínimo y la suma de los valores de la columna o campo id_categoria de todas las filas de la tabla “productos”, ya que no existe existe una condición en la sentencia SELECT que limite el número de filas. Como ejercicio escribe una sentencia SELECT que contenga una cláusula WHERE que limite las filas, por medio del campo id_marca.

En la próxima sección veremos como agrupar datos con SQL mediante una sentencia SQL. ¡Hasta la próxima!

IR A LA PAGINA DEL CURSO.

Publicado el 1 comentario

SQL básico. Funciones de fecha.

SQLite no tiene un tipo de dato fecha o tiempo, en su lugar el almacena las fecha en un formato de cadena determinado y las manipula a través de funciones.

Las cadenas de texto deben cumplir con los siguientes formatos de valor tiempo para ser tomados como fechas o tiempo por las funciones:

YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.SSS
HH:MM
HH:MM:SS
HH:MM:SS.SSS
now
DDDDDDDDDD

Puede consultar los valores de tiempo completos en la página oficial de SQLite.

Función SQL DATE().

Regresa la fecha en el formato YYYY-MM-DD.

Sintaxis: DATE(valor-tiempo, modificador, modificador, …)

Donde valor-tiempo es una cadena de texto con el formato arriba descrito. Y los modificadores pueden ser, entre otros:

NNN days
NNN hours
NNN minutes
NNN.NNNN seconds
NNN months
NNN years
localtime

Puede consultar los modificadores completos en la página oficial de SQLite. Veamos algunos ejemplos de el uso de la función date().

Función DATE().

En el ejemplo anterior obtenemos primeramente en la primera columna la fecha actual del sistema (al tiempo de publicar esta entrada el 2 de septiembre de 2021) aplicando el modificador mostrado, y en los columnas posteriores hacemos operaciones de agregar y restar días a la fecha actual. Por último se muestra como agregar un mes y un año a la fecha actual.

Función SQL DATETIME().

Regresa la fecha y el tiempo de 24 horas en el formato YYYY-MM-DD HH:MM:SS.

Sintaxis: DATETIME(valor-tiempo, modificador, modificador, …)

Donde valor-tiempo es una cadena de texto con el formato arriba descrito. Los modificadores son los mismos descritos en en la función DATE().

Veamos el siguiente ejemplo:

Función DATETIME().

En la primer columna la función DATETIME() obtiene la fecha y hora UTC (Tiempo Universal Coordinado) que corresponde a la hora en el meridiano de Greenwich. En la segunda columna la misma función agrega el modificador “localtime” lo que provoca que la fecha y hora correspondan a la zona geográfica en la que nos encontramos.

Podemos también usar los modificadores que utilizamos anteriormente en la función DATE(), pero además podemos usar los modificadores que suman o restan horas, minutos y segundos:

Función DATATIME().

La primera columna muestra la fucnión DATETIME() obteniendo la fecha y hora actual, las siguientes columnas muestran la misma fecha y hora pero aumentada 1 hora, decrementada 30 minutos y aumentada 60 segundos, respectivamente.

Función JULIANDAY().

Regresa el día Juliano al que corresponde la fecha y tiempo dados.

Sintaxis: JULIANDAY(valor-tiempo, modificador, modificador, …)

Ésta función también acepta los mismos modificadores que la función DATE() y DATETIME(). Veamos un ejemplo:

Función JULIANDAY().

En este ejemplo, estamos obteniendo el día juliano correspondiente al día en que se publicó esta entrada, que es el día 2 de Septiembre de 2021.

Obtener los días de diferencia entre dos fechas con SQLite.

Para obtener la diferencia de días entre dos fechas usamos la función JULIANDAY() de la siguiente forma:

Diferencia de días entre dos fechas.

En el ejemplo anterior estamos obteniendo los días transcurridos desde el 16 de Septiembre de 1810 hasta la fecha y hora que se escribió esta entrada que es el 2 de Septiembre de 2021.

En esta sección vimos las funciones de fecha y tiempo más usadas, existen otras las cuales pueden consultar en la documentación del sitio oficial de SQLite.

En la siguiente sección veremos como resumir (summarize en inglés) o acumular datos con SQL. ¡Hasta la próxima!

IR A LA PAGINA DEL CURSO.

Publicado el Dejar un comentario

SQL intermedio: Subconsultas en la cláusula FROM.

Las subconsultas también pueden aparecer en la cláusula FROM de un instrucción SELECT. Las subconsultas en la cláusula FROM pueden ser de tipo multi columna y multi fila o escalares. La instrucción SELECT ve como una tabla más los resultados de las subconsultas. Veamos un ejemplo:

Subconsulta en cláusula FROM.

En el ejemplo anterior la subconsulta obtiene el valor promedio del todos los totales de las facturas (tabla Invoice) que da como resultado la columna con alias “promedio” con valor 5.65194174757283 y le asigna el alias “promedio_total” a la subconsulta. El SELECT ve la subconsulta como si fuera una tabla llamada “promedio_total”.

La consulta hace un producto cruzado entre “promedio_total” y la tabla “invoice” con alias “factura” y filtra las filas mostrando sólo aquellas que el total de la factura sea mayor al promedio.

En este caso la consulta sólo hace un producto cruzado entre la subconsulta y la tabla, pero puede también ser usado en uniones o concatenaciones tanto internas como externas.

Espero y les sea útil este artículo. ¡Hasta la próxima!