Cualquier persona que trabaje en entornos donde el análisis de datos sea necesario debe tener conocimientos más o menos asentados de bases de datos. Plataformas como Google Analytics de por sí se quedan sin ser aprovechadas al 100% debido precisamente al desconocimiento por parte de sus usuarios de poder llevar a cabo análisis mucho más completos gracias a servicios como BigQuery. El cual permite guardar todos los datos relacionados con las visitas a nuestro sitio web o app como si de una base de datos tradicional se tratase pero en la nube.  

Por esta razón, para poder analizar los datos correctamente, a distinción de lo que defienden muchos, es esencial tener habilidades técnicas que nos permitan acceder a los espacios donde se alojan nuestros datos. Aquí es donde entra en juego la capacidad de cada uno para crear consultas (queries) tipo SQL: MySQL, SQL Server, DB2, PostgreSQL, Oracle, etc. Estos lenguajes son similares, sin embargo, en la práctica se observan numerosas diferencias que hay que tener en cuenta: nomenclatura, funciones, etc.

Para poder sintetizar todo en este artículo, voy a tratar de generar un flujo cronológico tipo de consultas habituales utilizadas y con las que se puede abracar una gran parte del trabajo diario de quienes nos dedicamos al análisis de datos. Lógicamente esto solo es una pequeña muestra de todo su potencial.

1.    Crear una tabla en base de datos.

Creando una tabla en base de datos MySQL

*.    Consultar los registros de la tabla. Este paso se puede realizar en cada una de las diferentes etapas para confirmar que se ha realizado correctamente.

SELECT * FROM testing;

2.    Insertar registros en la tabla.

INSERT INTO testing(name,birth,age) VALUES('Joseba','1985-01-25',36),('María','1987-07-31',33),('Estibaliz','1987-01-01',33);

3.    Eliminar un registro específico de la tabla.

DELETE FROM testing WHERE id=1;

4.    Eliminar tabla de base de datos. Después de este paso, para poder seguir el proceso de aprendizaje hay que volver a repetir el paso 2 para poder insertar de nuevo algunos registros.

DROP TABLE testing;

5.    Seleccionar los registros que cumplan alguna condición. Por ejemplo, aquellos registros cuya edad sea mayor que 34 años.

SELECT * FROM testing WHERE age>34

6.    Seleccionar los registros en base a funciones matemáticas. Por ejemplo, el registro de mayor edad.

SELECT id,name,birth,max(age) FROM testing

6.1.    Obtener la media de edad. Este tipo de funciones de agregación se pueden resumir en unas pocas: AVG, COUNT, MAX, MIN y SUM. Algunas como COUNT se le puede añadir el atributo DISTINCT que deduplica los registros de tal forma que solo muestra aquellos que no se dupliquen.

SELECT AVG(age) FROM testing

7.    Ordenar los registros según columnas. Se puede hacer de manera ascendente (ASC) o descendente (DESC).

SELECT * FROM testing ORDER BY id DESC

8.    Seleccionar registros agrupados según una condición. Por ejemplo, agrupar los registros por edades y por cada grupo mostrar solo aquellos cuya fecha de nacimiento es mayor o igual al 1 de enero de 1987.

SELECT * FROM testing GROUP BY age HAVING MIN(birth)>='1987-01-01'

9.    Añadir (ADD) o Modificar (MODIFY) las columnas de una tabla. Por ejemplo, añadir la columna ‘country’ a la tabla.

Añadir columna con Alter en tabla de base de datos

10.    Crear relaciones entre varias tablas. Las tablas actualmente no tienen por qué estar relacionadas de la manera tradicional (NoSQL), más aún con el auge del Big Data. Sin embargo, las estructuras habituales suelen atenerse a este tipo de desarrollos. Donde una tabla está relacionada con otra a través de una clave FOREIGN. Existen más tipos de claves aunque no es el objetivo de este artículo. En este sentido la lógica habitual es que las relaciones se puedan dar entre entidades tal que 1:1, 1:N, N:1, M:N. Siendo N o M varias entidades. Para seguir el proceso, se recomienda añadir valores a esta tabla como se ha realizado en el paso 2).

Creando una tabla en base de datos MySQL con clave extranjer añadida

11.    Realizar uniones entre varias tablas.

SELECT * FROM testing t LEFT JOIN testingcars c ON t.id=c.user_id
Uniones join de SQL para tablas de base de datos

12.    Condiciones personalizadas. A veces se requiere de hacer cambios durante la ejecución de la query. En programación es muy habitual usar la declaración IF. En SQL su equivalente sería CASE.

SELECT 
	CASE	
		WHEN age>=35 THEN 'adulto'
		WHEN age<35  THEN 'joven'
		END
	AS tipo,
	COUNT(distinct id) as 'conteo'
FROM testing GROUP BY tipo

13.    Queries avanzadas. Todo lo anterior se puede entremezclar para obtener consultas tan complejas como la siguiente. Esto ya dependerá de cómo y qué datos queramos obtener.

SELECT 
	CASE	
		WHEN age>=35 THEN 'adulto'
		WHEN age<35  THEN 'joven'
		END
	AS tipo,
	COUNT(distinct t1.id) as 'conteo'
FROM testing t1
	JOIN (
		SELECT * FROM testingcars
        	WHERE id in (
            	SELECT max(id) FROM testingcars GROUP BY user_id)
         ) t2
	ON t1.id=t2.user_id
	WHERE t2.car REGEXP '(opel|mercedes|audi|seat)'
		AND (YEAR(t1.birth)='1985' OR YEAR(t1.birth)='1987')
	GROUP BY tipo ORDER BY conteo DESC

Como se puede observar, SQL es un lenguaje que tiene un sinfín de opciones. Estas son algunas de ellas, las que he considerado como esenciales. A partir de aquí son muchas y muy diversas las posibilidades. Todo dependerá de lo que se desee obtener. Por esta razón, el analista tal y como yo lo entiendo no puede ser una persona que solo extraiga datos o solo analice datos, tiene que ser un perfil que entienda ambas. Debe ser alguien que aglutine y entienda la parte de negocio y la parte técnica como una sola. Me despido por hoy hasta el próximo artículo 😉

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *