Les subconsultes són una eina poderosa en SQL que permeten incrustar una consulta dins d'una altra. Aquestes poden ser utilitzades per a una varietat de propòsits, com ara filtrar resultats, calcular valors agregats o fins i tot unir taules de manera més complexa. En aquest tema, explorarem els diferents tipus de subconsultes i com utilitzar-les efectivament a BigQuery.

Tipus de Subconsultes

  1. Subconsulta en la clàusula SELECT:
    • Utilitzada per calcular valors que seran retornats com a part del conjunt de resultats.
  2. Subconsulta en la clàusula FROM:
    • Tractada com una taula temporal que pot ser utilitzada en la consulta principal.
  3. Subconsulta en la clàusula WHERE:
    • Utilitzada per filtrar els resultats de la consulta principal basant-se en els resultats de la subconsulta.
  4. Subconsulta en la clàusula HAVING:
    • Similar a la subconsulta en la clàusula WHERE, però aplicada després de l'agregació de dades.

Subconsulta en la clàusula SELECT

Exemple

SELECT
  name,
  (SELECT AVG(salary) FROM employees) AS avg_salary
FROM
  employees;

Explicació

  • Aquesta subconsulta calcula el salari mitjà de tots els empleats.
  • El resultat de la subconsulta es retorna com una columna addicional avg_salary en el conjunt de resultats de la consulta principal.

Subconsulta en la clàusula FROM

Exemple

SELECT
  department,
  AVG(salary) AS avg_salary
FROM
  (SELECT department, salary FROM employees WHERE salary > 50000)
GROUP BY
  department;

Explicació

  • La subconsulta selecciona els empleats amb un salari superior a 50,000.
  • La consulta principal calcula el salari mitjà per departament només per als empleats seleccionats per la subconsulta.

Subconsulta en la clàusula WHERE

Exemple

SELECT
  name,
  salary
FROM
  employees
WHERE
  salary > (SELECT AVG(salary) FROM employees);

Explicació

  • La subconsulta calcula el salari mitjà de tots els empleats.
  • La consulta principal selecciona els empleats amb un salari superior al salari mitjà calculat per la subconsulta.

Subconsulta en la clàusula HAVING

Exemple

SELECT
  department,
  AVG(salary) AS avg_salary
FROM
  employees
GROUP BY
  department
HAVING
  AVG(salary) > (SELECT AVG(salary) FROM employees);

Explicació

  • La subconsulta calcula el salari mitjà de tots els empleats.
  • La consulta principal calcula el salari mitjà per departament i només retorna aquells departaments on el salari mitjà és superior al salari mitjà global calculat per la subconsulta.

Exercicis Pràctics

Exercici 1

Descripció: Selecciona els noms dels empleats que treballen en un departament on el salari mitjà és superior a 60,000.

SELECT
  name
FROM
  employees
WHERE
  department IN (
    SELECT
      department
    FROM
      employees
    GROUP BY
      department
    HAVING
      AVG(salary) > 60000
  );

Exercici 2

Descripció: Troba els departaments on el nombre d'empleats és superior a la mitjana del nombre d'empleats per departament.

SELECT
  department
FROM
  employees
GROUP BY
  department
HAVING
  COUNT(*) > (
    SELECT
      AVG(dept_count)
    FROM
      (SELECT COUNT(*) AS dept_count FROM employees GROUP BY department)
  );

Solucions

Solució Exercici 1

SELECT
  name
FROM
  employees
WHERE
  department IN (
    SELECT
      department
    FROM
      employees
    GROUP BY
      department
    HAVING
      AVG(salary) > 60000
  );

Solució Exercici 2

SELECT
  department
FROM
  employees
GROUP BY
  department
HAVING
  COUNT(*) > (
    SELECT
      AVG(dept_count)
    FROM
      (SELECT COUNT(*) AS dept_count FROM employees GROUP BY department)
  );

Errors Comuns i Consells

  1. Error: Subconsulta retorna més d'un valor:
    • Assegura't que la subconsulta en una clàusula WHERE o HAVING retorna un sol valor. Utilitza agregacions o limitacions adequades.
  2. Error: Subconsulta no correlacionada:
    • Si la subconsulta necessita referenciar una columna de la consulta principal, assegura't que està correctament correlacionada.
  3. Consell: Optimització:
    • Les subconsultes poden ser costoses en termes de rendiment. Considera utilitzar JOIN o WITH (CTEs) per a optimitzar les consultes complexes.

Conclusió

Les subconsultes són una eina essencial per a realitzar consultes SQL més complexes i poderoses. Comprendre com i quan utilitzar-les pot millorar significativament la teva capacitat per a manipular i analitzar dades a BigQuery. Practica amb els exercicis proporcionats per a consolidar els teus coneixements i prepara't per a temes més avançats en SQL.

Curs de BigQuery

Mòdul 1: Introducció a BigQuery

Mòdul 2: SQL bàsic a BigQuery

Mòdul 3: SQL intermedi a BigQuery

Mòdul 4: SQL avançat a BigQuery

Mòdul 5: Gestió de dades a BigQuery

Mòdul 6: Optimització del rendiment de BigQuery

Mòdul 7: Seguretat i compliment de BigQuery

Mòdul 8: Integració i automatització de BigQuery

Mòdul 9: Aprenentatge automàtic a BigQuery (BQML)

Mòdul 10: Casos d'ús de BigQuery en el món real

© Copyright 2024. Tots els drets reservats