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 department
agrupa 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 department
divideix les dades per departament.ORDER BY salary DESC
ordena 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
AvgSalaries
calcula 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
RecentSales
selecciona 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