En aquest tema, explorarem com utilitzar SQL per a l'anàlisi de dades. Aprendrem a extreure informació valuosa de les bases de dades, utilitzant diverses tècniques i funcions avançades. Aquestes habilitats són essencials per a analistes de dades, científics de dades i qualsevol persona que necessiti treballar amb grans volums de dades.
Objectius del tema
- Comprendre com utilitzar SQL per a l'anàlisi de dades.
- Aprendre a utilitzar funcions agregades i de finestra.
- Realitzar anàlisis de dades complexes amb subconsultes i CTEs.
- Aplicar tècniques d'optimització per millorar el rendiment de les consultes.
Contingut
- Funcions agregades
Les funcions agregades són essencials per resumir i agrupar dades. Les funcions més comunes són SUM, AVG, COUNT, MIN i MAX.
Exemple:
SELECT department, COUNT(*) AS num_employees, AVG(salary) AS avg_salary FROM employees GROUP BY department;
Explicació:
COUNT(*)compta el nombre d'empleats per departament.AVG(salary)calcula el salari mitjà per departament.GROUP BY departmentagrupa els resultats per departament.
- Funcions de finestra
Les funcions de finestra permeten realitzar càlculs sobre un conjunt de files relacionades amb la fila actual.
Exemple:
SELECT employee_id, department, salary,
RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS rank
FROM employees;Explicació:
RANK()assigna un rang a cada empleat dins del seu departament basat en el salari.PARTITION BY departmentdivideix les dades per departament.ORDER BY salary DESCordena els salaris de major a menor dins de cada departament.
- Subconsultes
Les subconsultes són consultes dins d'altres consultes. Són útils per a realitzar anàlisis més complexes.
Exemple:
Explicació:
- La subconsulta
(SELECT AVG(salary) FROM employees)calcula el salari mitjà de tots els empleats. - La consulta principal selecciona els empleats amb un salari superior a la mitjana.
- Expressions de taula comunes (CTEs)
Les CTEs són una manera de definir subconsultes temporals que poden ser referenciades dins de la consulta principal.
Exemple:
WITH AvgSalaries AS (
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
)
SELECT e.employee_id, e.department, e.salary, a.avg_salary
FROM employees e
JOIN AvgSalaries a ON e.department = a.department
WHERE e.salary > a.avg_salary;Explicació:
- La CTE
AvgSalariescalcula el salari mitjà per departament. - La consulta principal selecciona els empleats amb un salari superior a la mitjana del seu departament.
- Optimització de consultes
Per a l'anàlisi de dades, és crucial que les consultes siguin eficients. Aquí tens alguns consells per optimitzar les teves consultes:
- Utilitza índexs: Els índexs poden millorar significativament el rendiment de les consultes.
- Evita subconsultes innecessàries: Utilitza JOINs en lloc de subconsultes quan sigui possible.
- Filtra les dades primer: Aplica les condicions de filtratge abans d'agrupar o ordenar les dades.
- Utilitza CTEs amb moderació: Les CTEs poden ser útils, però també poden afectar el rendiment si no s'utilitzen correctament.
Exercici pràctic
Enunciat:
Tens una taula sales amb les següents columnes: sale_id, product_id, quantity, price, sale_date. Realitza una consulta que mostri el total de vendes (quantitat * preu) per cada producte, només per a les vendes realitzades en l'últim any.
Solució:
WITH RecentSales AS (
SELECT product_id, quantity, price
FROM sales
WHERE sale_date >= DATEADD(year, -1, GETDATE())
)
SELECT product_id, SUM(quantity * price) AS total_sales
FROM RecentSales
GROUP BY product_id;Explicació:
- La CTE
RecentSalesselecciona les vendes realitzades en l'últim any. - La consulta principal calcula el total de vendes per producte.
Errors comuns i consells
- No utilitzar índexs: Assegura't que les columnes utilitzades en les condicions de filtratge i les JOINs tinguin índexs adequats.
- Subconsultes lentes: Si una subconsulta és lenta, considera reescriure-la com una JOIN o una CTE.
- Agrupacions incorrectes: Quan utilitzis
GROUP BY, assegura't que totes les columnes no agregades estiguin incloses en la clàusulaGROUP BY.
Conclusió
En aquest tema, hem après com utilitzar SQL per a l'anàlisi de dades, incloent funcions agregades, funcions de finestra, subconsultes i CTEs. També hem vist com optimitzar les consultes per millorar el rendiment. Aquestes habilitats són essencials per a qualsevol persona que treballi amb dades i necessiti extreure informació valuosa de les bases de dades.
Curs de SQL
Mòdul 1: Introducció a SQL
Mòdul 2: Consultes bàsiques de SQL
Mòdul 3: Treballar amb múltiples taules
Mòdul 4: Filtratge avançat de dades
- Utilitzar LIKE per a coincidències de patrons
- Operadors IN i BETWEEN
- Valors NULL i IS NULL
- Agrupar dades amb GROUP BY
- Clàusula HAVING
Mòdul 5: Manipulació de dades
Mòdul 6: Funcions avançades de SQL
Mòdul 7: Subconsultes i consultes niades
- Introducció a les subconsultes
- Subconsultes correlacionades
- EXISTS i NOT EXISTS
- Utilitzar subconsultes en les clàusules SELECT, FROM i WHERE
Mòdul 8: Índexs i optimització del rendiment
- Comprendre els índexs
- Crear i gestionar índexs
- Tècniques d'optimització de consultes
- Analitzar el rendiment de les consultes
Mòdul 9: Transaccions i concurrència
- Introducció a les transaccions
- Propietats ACID
- Instruccions de control de transaccions
- Gestionar la concurrència
Mòdul 10: Temes avançats
Mòdul 11: SQL en la pràctica
- Casos d'ús del món real
- Millors pràctiques
- SQL per a l'anàlisi de dades
- SQL en el desenvolupament web
