Torna all'elenco degli articoli Articoli
Tempo di lettura: 21 minuti

Domande di colloquio SQL per analisti di dati

Indice

Avete un colloquio imminente per una posizione di analista di dati e l'SQL è una delle competenze che verranno testate. Queste domande sull'SQL per analisti di dati sono fatte apposta per voi!

L'SQL è una competenza indispensabile per ogni analista di dati. Semplifica l'estrazione e la manipolazione dei dati, consentendo agli analisti di convertire i dati grezzi in informazioni utili. Consente agli analisti di eseguire analisi ad hoc, accelerando i processi decisionali dell'organizzazione. Inoltre, incoraggia la collaborazione tra gli analisti di dati e gli amministratori di database, rendendo più fluide le operazioni sui dati.

Se non sapete da dove iniziare il vostro viaggio in SQL, non cercate altro che il nostro corso SQL per l'analisi dei dati. Questo corso completo copre tutti gli aspetti dell'analisi dei dati, compreso il recupero dei dati e la generazione di report.

Tuttavia, probabilmente siete qui per prepararvi al colloquio di analisi dei dati. Quindi, senza ulteriori indugi, iniziamo subito.

Come prepararsi per un colloquio di analisi dei dati

Per affrontare con successo un colloquio di analisi dei dati è necessaria una combinazione strategica di competenze tecniche e preparazione mirata. Ecco alcuni suggerimenti pratici che vi aiuteranno a distinguervi:

  • Ripassare i concetti fondamentali di SQL. Assicuratevi di avere una conoscenza approfondita dei concetti fondamentali dell'SQL, ossia l'interrogazione, il filtraggio, l'unione e l'aggregazione dei dati. Considerate la possibilità di iscrivervi al nostro corso SQL per principianti , progettato per rafforzare la vostra conoscenza dell'SQL di base.
  • Imparare le funzioni SQL standard. Migliorate la comprensione delle funzioni SQL standard, comprese le funzioni numeriche, di testo e di data/ora. Imparate a gestire efficacemente i valori di NULL e a utilizzare le funzioni SQL per scrivere query più efficaci.
  • Esercitarsi nella creazione di report SQL. Iniziate con i report di base utilizzando le funzioni GROUP BY, ORDER BY e HAVING. Poi potete passare ai report intermedi e avanzati che utilizzano subquery, funzioni finestra ed espressioni di tabella comuni (CTE).
  • Fate una valutazione delle competenze. Prendete in considerazione l'idea di sottoporvi a una valutazione di SQL per valutare il vostro livello di competenza. La nostra valutazione delle competenze SQL comprende 18 compiti interattivi online che coprono sei aree di competenza SQL.
  • Utilizzare le risorse di apprendimento. Utilizzate corsi ed esercitazioni online per migliorare il vostro SQL. I nostri corsi SQL includono materiale didattico completo ed esercizi pratici per aiutarvi a migliorare l'analisi dei dati e le query SQL. In alternativa, se preferite i libri, consultate il nostro elenco dei migliori libri SQL per l'analisi dei dati.

Domande di base per il colloquio SQL

Dopo aver parlato dell'importanza di imparare l'SQL per l'analisi dei dati, vediamo alcune domande di colloquio sull'SQL adatte a diversi livelli di competenza: base, intermedio e avanzato. Tenete a portata di mano il nostro foglio informativo sull'SQL per l'analisi dei dati per aiutarvi ad affrontare le sfide future.

Domanda 1: Che cos'è l'SQL?

SQL (Structured Query Language) è un linguaggio di programmazione standard per gestire e comunicare con i database relazionali. Consente agli utenti di interrogare i dati, inserire, aggiornare e cancellare record, creare e modificare schemi di database e gestire i permessi di accesso.

Domanda 2: Elencate gli elementi di base di una query SQL.

Una query SQL contiene in genere un'istruzione:

  • SELECT un'istruzione che recupera i dati da una o più tabelle.
  • FROM clausola che specifica la tabella o le tabelle in cui risiedono i dati.
  • Clausola WHERE (opzionale) che filtra i risultati in base a criteri specificati.
  • Clausola GROUP BY (opzionale) che raggruppa i risultati in base alle colonne.
  • Clausola HAVING (opzionale) che filtra i risultati raggruppati.
  • Clausola ORDER BY (opzionale) che ordina i risultati in ordine crescente (o decrescente).

Domanda 3: Come si selezionano tutti i dati di una tabella?

Per recuperare tutti i dati da una tabella, utilizzare:

SELECT * 
FROM employees;

Questa query recupera tutte le righe di tutte le colonne dalla tabella dei dipendenti:

  • SELECT *: Seleziona tutte le colonne della tabella specificata; l'asterisco (*) rappresenta tutte le colonne di una tabella.
  • FROM employees: Specifica la tabella da cui verranno recuperati i dati.

Domanda 4: Come si selezionano determinate colonne da una tabella?

Per recuperare colonne specifiche da una tabella, è necessario elencare i nomi delle colonne desiderate nell'istruzione SELECT:

SELECT first_name, last_name, department 
FROM employees;

Questa query recupera i dati solo dalle colonne specificate, fornendo una visione mirata delle informazioni rilevanti della tabella. employees tabella.

  • SELECT first_name, last_name, department: Restituisce solo i dati contenuti nelle colonne first_name, last_name, e department
  • FROM employees: Specifica la tabella da cui verranno recuperati i dati.

Si possono anche nominare le colonne selezionate usando AS:

SELECT first_name, 
last_name AS surname, 
department 
FROM employees;

Nei risultati della query, la colonna last_name verrà visualizzata come cognome. È possibile utilizzare questa funzione per differenziare due colonne con nomi simili o per aggiungere un contesto più ampio a una colonna. Ad esempio, rinominando la colonna number in part_id_number si può identificare rapidamente il tipo di dati contenuti in quella colonna.

Domanda 5: Spiegate la sintassi della clausola WHERE.

La clausola WHERE filtra le righe in base a condizioni specifiche. Ecco un esempio della sua sintassi:

SELECT first_name, last_name
FROM employees
WHERE department = 'Sales';

In questa query, WHERE limita i risultati ai dati dei dipendenti del reparto vendite.

  • SELECT first_name, last_name: Specifica le colonne da cui recuperare i dati.
  • FROM employees: Specifica la tabella da cui recuperare i dati.
  • WHERE department = 'Sales': Limita i risultati ai dipendenti del reparto Vendite.

WHERE può essere applicato a diversi tipi di dati. Quando si filtrano numeri o date, si possono usare confronti diretti o operatori come <,<=,>,>=, o =.

SELECT first_name, last_name
FROM employees
WHERE salary > 50000;

Quando si filtrano i valori NULL, si possono usare gli operatori IS NULL o IS NOT NULL:

SELECT * 
FROM employees 
WHERE manager_id IS NULL;

Domanda 6: Come si filtrano i risultati delle query in base a più condizioni?

Per filtrare i risultati in base a più condizioni, nella clausola WHERE si utilizzano operatori logici come AND, OR e NOT.

  • L'operatore AND restituisce le righe che soddisfano tutte le condizioni specificate.
  • L'operatore OR restituisce le righe che soddisfano almeno una delle condizioni specificate.
  • L'operatore NOT restituisce le righe che non soddisfano le condizioni.

Si consideri il seguente esempio:

SELECT first_name, last_name
FROM employees
WHERE department = 'Sales' AND salary > 50000;

Questa query restituirà solo i dipendenti che lavorano nelle vendite e il cui stipendio è superiore a 50.000 dollari. Se il dipendente lavora in un altro reparto o lavora nelle vendite e guadagna meno di 50.000 dollari, non verrà mostrato nei risultati.

  • SELECT first_name, last_name: Determina le colonne da cui recuperare i dati.
  • FROM employees: Specifica la tabella da cui recuperare i dati.
  • WHERE department = 'Sales' AND salary > 50000: Filtra i risultati per includere solo i dipendenti del reparto Vendite con uno stipendio più alto.

È possibile combinare più condizioni utilizzando le parentesi:

SELECT first_name, last_name
FROM employees
WHERE (department = 'Sales' AND salary > 50000) 
  OR manager_id IS NULL;

In questa query, saranno inclusi nei risultati solo i dipendenti che non fanno capo a un manager (cioè il cui ID manager è NULL) o che lavorano nelle vendite e guadagnano più di 50.000 dollari.

Domanda 7: Come si filtrano i risultati per un determinato valore di testo?

Per filtrare i risultati in base a un valore specifico in una colonna di testo, utilizzare l'operatore LIKE . Sono necessari anche i simboli di pattern matching % (corrisponde a zero o più caratteri) e/o _ (corrisponde a qualsiasi singolo carattere). Si consideri il seguente esempio:

SELECT product_name, description
FROM products
WHERE description LIKE '%apple%';

Questa query dimostra l'uso di LIKE con la corrispondenza dei modelli:

  • SELECT product_name, description: specifica le colonne da cui recuperare i dati.
  • FROM products: Specifica la tabella da cui verranno recuperati i dati.
  • WHERE description IS LIKE '%apple%': Filtra i risultati per mostrare solo i prodotti che hanno la parola "apple" nella loro descrizione.

Un altro esempio potrebbe essere:

SELECT * 
FROM employees 
WHERE first_name LIKE 'Mar_a';

Immaginiamo di cercare tutti i dipendenti che si chiamano María o Maria. Questa query restituirà tutti i dipendenti il cui nome inizia con "Mar", seguito da un carattere qualsiasi al posto della "i" e da una "a". Questo schema può essere utilizzato per trovare una corrispondenza sia con 'Maria' che con 'María' in un database in cui il nome potrebbe non avere l'accento sulla 'i' (restituirebbe anche 'Marta', 'Marla', 'Marja' e qualsiasi altro nome che corrisponda allo schema).

Domanda 8: Come si aggiornano le righe di un database?

Per aggiornare le righe esistenti in una tabella di database, si utilizza l'istruzione UPDATE:

UPDATE employees
SET salary = 60000, department = 'Marketing'
WHERE employee_id = 101;

Questa query mostra come aggiornare le colonne esistenti con nuovi valori per le righe che soddisfano la condizione specificata.

  • UPDATE employees: Specifica la tabella da aggiornare.
  • SET salary = 60000, department = 'Marketing': Specifica le colonne e i loro nuovi valori (aggiornati).
  • WHERE employee_id = 101: Definisce quali righe saranno aggiornate: in questo caso, la riga in cui l'ID del dipendente è 101. Per specificare condizioni di aggiornamento più complesse, è possibile utilizzare anche AND, OR, NOT, filtri numerici e così via.

Domanda 9: Come si rimuovono le righe da un database?

Per rimuovere le righe da una tabella di database, si usa l'istruzione DELETE FROM, seguita dal nome della tabella e dalla condizione che indica quali righe eliminare:

DELETE FROM employees
WHERE department = 'Human Resources';

Questa query mostra come eliminare le righe da una tabella di database in base a una condizione specificata:

  • DELETE FROM employees: Indica la tabella da cui eliminare le righe.
  • WHERE department = 'Human Resources': Specifica la condizione che determina quali righe devono essere eliminate: in questo caso, tutti i dipendenti del dipartimento Risorse umane. È possibile specificare le condizioni di eliminazione utilizzando i criteri WHERE standard.

Domanda 10: Come si ordinano i risultati di una query SQL?

Si utilizza la clausola ORDER BY, seguita dal nome della colonna o delle colonne in base alle quali si desidera ordinare i risultati:

SELECT product_name, price
FROM products
ORDER BY price DESC;

Questa query mostra come ordinare i risultati in base a una colonna specificata, consentendo di presentare i dati nell'ordine desiderato.

  • SELECT product_name, price: Determina le colonne da cui recuperare i dati.
  • FROM products: Definisce la tabella in cui risiedono i dati.
  • ORDER BY price DESC: Ordina i risultati (dal più alto al più basso, ovvero in ordine decrescente) in base a price L'ordinamento predefinito di SQL è ascendente, con i valori di testo ordinati dalla A alla Z e i valori numerici ordinati dal più basso al più alto. Se DESC non viene specificato, l'ordinamento verrà effettuato in ordine crescente.

Domande SQL intermedie

Domanda 11: Come si combinano i dati di più tabelle in una query?

Le query SQL utilizzano le clausole JOIN per combinare i risultati di più tabelle. JOINconsente di recuperare dati da tabelle correlate (cioè tabelle con una o più colonne in comune) in base a criteri specifici. Ecco un esempio di JOIN:

SELECT orders.order_id, customers.customer_name
FROM orders
JOIN customers 
ON orders.customer_id = customers.customer_id;

Questa query recupera l'ID dell'ordine e il nome del cliente dalle tabelle orders e customers e dalle tabelle. Unisce le informazioni quando i record di entrambe le tabelle contengono un ID cliente corrispondente. Per ulteriori informazioni sul funzionamento di JOIN, consultare Guida illustrata all'INNER JOIN di SQL. Potete trovare altri esempi di domande di JOIN in Le 10 principali domande di colloquio su JOIN in SQL e le relative risposte.

Domanda 12: Descrivete i tipi di JOIN.

I tipi di JOIN comprendono diverse varianti, ognuna delle quali ha uno scopo specifico nel combinare i risultati di più tabelle:

  • INNER JOIN: Recupera solo i record in cui entrambe le tabelle hanno valori corrispondenti in base alla condizione specificata.
  • LEFT JOIN: Restituisce tutti i record della tabella di sinistra e tutti i record corrispondenti della tabella di destra. Se non viene trovata alcuna corrispondenza, vengono restituiti i valori NULL per le colonne della tabella destra.
  • GIUNTA A DESTRA: restituisce tutti i record della tabella di destra e tutti i record corrispondenti della tabella di sinistra. Se non viene trovata alcuna corrispondenza, vengono restituiti i valori NULL per le colonne della tabella di sinistra.
  • FULL JOIN: restituisce tutti i record quando c'è una corrispondenza nella tabella di sinistra o in quella di destra. Se non viene trovata alcuna corrispondenza, le righe non corrispondenti vengono restituite con NULL.
  • CROSS JOIN: restituisce il prodotto cartesiano delle due tabelle, cioè tutte le possibili combinazioni di righe.

Sebbene una self-JOIN utilizzi la stessa sintassi delle altre JOINs, in realtà si tratta di unire una tabella a se stessa. Ciò consente di effettuare confronti tra righe all'interno della stessa tabella.

Domanda 13: Descrivete il LEFT JOIN e la differenza tra LEFT JOIN e INNER JOIN.

LEFT JOIN è un tipo di OUTER JOIN che restituisce tutte le righe della tabella di sinistra più le righe corrispondenti della tabella di destra. Se non c'è corrispondenza, vengono restituiti i valori di NULL per le colonne della tabella di destra.

La principale distinzione tra LEFT JOIN e INNER JOIN è il comportamento con le righe non corrispondenti:

  • LEFT JOIN restituisce tutte le righe della tabella di sinistra, indipendentemente dall'esistenza di una corrispondenza nella tabella di destra. Se non c'è corrispondenza nella tabella di destra, alle colonne vengono assegnati i valori NULL.
  • INNER JOIN restituisce solo le righe corrispondenti di entrambe le tabelle. Le righe non corrispondenti di una delle due tabelle vengono rimosse dall'insieme dei risultati.

Si immagini di avere una tabella con i nomi degli studenti e un'altra contenente i loro voti. Utilizzando LEFT JOIN, si otterrebbe un elenco di tutti gli studenti, compresi quelli che hanno NULL voti. Al contrario, un INNER JOIN mostrerebbe solo gli studenti che hanno voti, escludendo i record con voti NULL.

Domanda 14: Che cosa fa GROUP BY?

La clausola GROUP BY raggruppa le righe con gli stessi valori in righe di riepilogo. Viene spesso combinata con funzioni aggregate (come SUM(), COUNT() e AVG()) per eseguire calcoli su dati raggruppati.

SELECT department, COUNT(employee_id)
FROM employees
GROUP BY department;

In questo esempio, la query raggruppa le righe in base ai valori della colonna department e conta i valori di employee_id per ogni reparto. Per altri esempi di query simili, consultate il nostro articolo Top 9 SQL GROUP BY Interview Questions.

Domanda 15: Cosa sono le funzioni aggregate?

Le funzioni aggregate di SQL calcolano un insieme di valori e restituiscono un singolo valore. Queste funzioni sono spesso utilizzate per riassumere i dati ed eseguire calcoli su più righe.

Le funzioni aggregate SQL più comuni sono:

  • SUM(): Restituisce la somma dei valori numerici di un insieme.
  • COUNT(): Conta il numero di righe in un insieme, includendo facoltativamente i valori non nulli.
  • AVG(): Determina la media dei valori numerici di un insieme.
  • MIN(): Restituisce il valore minimo dell'insieme.
  • MAX(): Restituisce il valore massimo dell'insieme.
SELECT 
    AVG(salary) AS avg_salary,
    COUNT(*) AS total_employees,
    MAX(age) AS max_age
FROM 
    employees;

In questo esempio, le funzioni aggregate calcolano il salario medio, contano il numero totale di dipendenti e determinano l'età maggiore tra tutti i dipendenti della tabella. employees tabella. Per ulteriori esempi di queste funzioni, consultate il nostro foglio informativo sulle funzioni aggregate di SQL.

Domanda 16: Cosa fa HAVING?

La clausola HAVING filtra i risultati della clausola GROUP BY. Viene utilizzata solo con i dati aggregati e consente di applicare criteri di filtraggio ai risultati raggruppati.

Immaginiamo di avere una tabella di ordini e di voler trovare l'importo totale delle vendite per ogni cliente. Tuttavia, si desidera includere solo i clienti con un totale di 1.000 dollari o più. Questa è la query da utilizzare:

SELECT customer_id, SUM(amount) AS total_sales
FROM orders
GROUP BY customer_id
HAVING SUM(amount) > 1000;

Qui, la clausola HAVING filtra i gruppi (clienti) in base alla condizione che l'importo totale delle vendite del cliente superi i 1.000 dollari. Viene applicata dopo l'operazione GROUP BY e consente di filtrare i risultati raggruppati.

Domanda 17: Qual è la differenza tra WHERE e HAVING?

HAVING filtra gruppi di righe e viene applicato dopo l'istruzione GROUP BY. È pensato specificamente per i dati aggregati e consente di applicare criteri di filtraggio ai risultati raggruppati. WHERE filtra le singole righe e viene applicato prima di GROUP BY.

Immaginate di avere una tabella di ordini e di voler calcolare l'importo totale delle vendite per ogni prodotto, ma solo per i prodotti le cui vendite totali superano i 10.000 dollari. Ecco come utilizzare la clausola HAVING:

SELECT 
    product_id,
    SUM(quantity_sold * price_per_unit) AS total_sales
FROM 
    sales
GROUP BY 
    product_id
HAVING 
    SUM(quantity_sold * price_per_unit) > 10000;

Considerate ora lo stesso scenario, ma questa volta volete solo le vendite in cui il prezzo unitario del prodotto è superiore a 10 dollari e la vendita totale è superiore a 10.000 dollari. Alcune di queste informazioni si trovano in singole righe, quindi le righe devono essere filtrate prima del raggruppamento. Dobbiamo anche filtrare le vendite totali, quindi anche i gruppi saranno filtrati.

SELECT 
    product_id,
    SUM(quantity_sold * price_per_unit) AS total_sales
FROM 
    sales
WHERE
    price_per_unit > 10
GROUP BY 
    product_id
HAVING 
    SUM(quantity_sold * price_per_unit) > 10000;

Questo dimostra come la clausola WHERE filtri le singole righe in base alle condizioni, mentre la clausola HAVING filtri i gruppi di righe in base ai dati aggregati. Per un approfondimento su questo argomento, consultate il nostro articolo HAVING vs WHERE in SQL: Cosa si deve sapere.

Domanda 18: Fornite un esempio di subquery SQL.

Una subquery SQL, nota anche come query annidata o query interna, è una query contenuta in un'altra query. Viene utilizzata nelle istruzioni SELECT, INSERT, UPDATE e DELETE per eseguire operazioni basate sui risultati di un'altra query. Si consideri il seguente esempio:

SELECT product_name
FROM products
WHERE category_id IN (SELECT category_id FROM categories WHERE category_name = 'Electronics');

In questa query, la clausola WHERE utilizza una sottoquery per recuperare i valori di category_id dalla tabella con . categories dalla tabella category_name 'Electronics'. La query esterna recupera quindi i nomi dei prodotti di elettronica in base ai risultati della sottoquery.

SQL avanzato Domande

Domanda 19: Qual è la differenza tra UNION e UNION ALL?

UNION rimuove le righe duplicate dal set di risultati combinato. Al contrario, UNION ALL mantiene tutte le righe, comprese quelle duplicate.

Immaginiamo di avere due tabelle, employees e managersche contengono entrambe la colonna employee_id. Vogliamo combinare gli ID dei dipendenti delle due tabelle.

SELECT employee_id FROM employees
UNION
SELECT employee_id FROM managers;

In questa query, se employee_id appare in entrambe le tabelle employees e managersUNION rimuoverà il duplicato, mentre UNION ALL manterrà entrambe le occorrenze. Per saperne di più, leggete UNION vs. UNION ALL in SQL: Qual è la differenza?

Domanda 20: Cosa sono le funzioni finestra di SQL e a cosa servono?

Le funzioni SQL window eseguono calcoli su un sottoinsieme di righe della tabella correlate alla riga corrente. Vengono utilizzate su una finestra, che è un insieme di righe correlate alla riga corrente.

Le funzioni finestra si differenziano dalle query di GROUP BY perché GROUP BY aggrega i dati in base a colonne specifiche, raggruppando più righe in righe di riepilogo. Le funzioni finestra, invece, eseguono calcoli su un insieme di righe correlate alla riga corrente all'interno del risultato della query, senza collassare l'insieme dei risultati. Per saperne di più, leggete SQL Window Functions (Funzioni Finestra) vs. GROUP BY: Qual è la differenza?

Per applicare le funzioni finestra, si utilizza laclausola OVER con la seguente sintassi:

<function>(column) OVER (PARTITION BY partition_column ORDER BY order_column)

Dove:

  • <function> indica la funzione finestra utilizzata (ad esempio, AVG(), SUM(), RANK()).
  • (column): La colonna o l'espressione a cui viene applicata la funzione finestra.
  • PARTITION BY partition_column: Una clausola opzionale che divide l'insieme dei risultati in sottoinsiemi basati su una o più colonne. La funzione viene quindi applicata singolarmente a ogni partizione.
  • ORDER BY order_column: Una clausola opzionale che specifica l'ordine delle righe all'interno di ogni partizione. Determina quali righe appaiono nel riquadro della finestra per ogni calcolo.

Le funzioni finestra sono spesso utilizzate per calcolare valori aggregati come medie, totali e conteggi su un insieme di righe. Vengono inoltre utilizzate per confrontare i valori con quelli di altre righe dell'insieme di risultati; questo aiuta a determinare le classifiche, i numeri di riga e i valori massimi e minimi all'interno di una finestra. Per saperne di più, leggete Quando si usa SQL Window Functions (Funzioni Finestra)?

Immaginiamo di avere una tabella chiamata employees con le colonne employee_id, department_id e salary. Possiamo calcolare il salario medio per reparto utilizzando la funzione finestra AVG():

SELECT 
    employee_id, 
    department_id, 
    salary,
    AVG(salary) OVER (PARTITION BY department_id) AS avg_salary_per_department
FROM 
    employees;

Le funzioni SQL window sono ottime per calcolare aggregati su sottoinsiemi specifici di dati, come mostrato in questo esempio di calcolo della media degli stipendi all'interno dei reparti. Sono preziose per la classificazione dei dati, che può essere utile in attività come la valutazione delle prestazioni. Queste funzioni facilitano l'esecuzione di confronti analitici e l'identificazione di tendenze, come ad esempio le entrate trimestrali. Nelle domande seguenti vedremo altri esempi.

Domanda 21: Come si classificano le righe in SQL?

Per classificare le righe in SQL, si utilizzano le funzioni RANK(), DENSE_RANK(), PERCENT_RANK() e ROW_NUMBER(). Queste funzioni assegnano un grado o un numero di riga a ogni riga del set di risultati in base a criteri predefiniti:

  • RANK(): Assegna un grado unico a ogni riga distinta. Le righe con lo stesso valore ricevono lo stesso grado, ma ci sono degli spazi nella classifica (ad esempio, 1,2,3,3,5).
  • DENSE_RANK(): Assegna un rango unico a ogni riga e attribuisce lo stesso rango a righe uguali, ma elimina gli spazi vuoti nella sequenza di rango. Assegna invece il rango successivo alla riga che segue le righe in parità (ad esempio, 1,2,3,3,4).
  • PERCENT_RANK() restituisce la graduatoria per ogni riga della partizione/set di risultati come percentile (da 0 a 1).
  • ROW_NUMBER() assegna un numero di riga univoco a ogni riga dell'insieme di risultati, indipendentemente dai duplicati o dai valori di parità.

Per maggiori informazioni sulle differenze tra queste funzioni, leggete la nostra panoramica sulle funzioni di classificazione in SQL.

Immaginiamo di avere una tabella chiamata employees con le colonne employee_id, employee_name e salary. Possiamo classificare i dipendenti in base al loro stipendio, in ordine decrescente, utilizzando la funzione RANK() window:

SELECT 
    employee_id, 
    employee_name, 
    salary,
    RANK() OVER (ORDER BY salary DESC) AS salary_rank
FROM 
    employees;

Questa query restituisce gli ID dei dipendenti, i nomi e gli stipendi della tabella. employees tabella. Quindi classifica ogni dipendente in base al suo stipendio, con gli stipendi più alti che vengono classificati più in basso. Il risultato include le colonne originali e una nuova colonna, salary_rank, che indica il livello di stipendio di ciascun dipendente.

Domanda 22: Che cos'è un CTE? Quando si usa?

Una CTE, o espressione di tabella comune, è un insieme di risultati temporanei con nome che può essere utilizzato in un'istruzione SELECT, INSERT, UPDATE, o DELETE. Permette di dividere query complesse in parti gestibili e riutilizzabili.

Una CTE, introdotta con la parola chiave WITH, consente di creare una struttura temporanea simile a una tabella che esiste solo durante l'esecuzione della query. La tabella temporanea può poi essere richiamata nella stessa query. Le CTE sono particolarmente utili per suddividere calcoli complessi in più passaggi; ciò migliora l'organizzazione del codice e ne consente il riutilizzo.

Si supponga di avere una tabella chiamata employees con le colonne employee_id, employee_name e salary. Possiamo creare una CTE per selezionare i dipendenti che guadagnano più di 100.000 dollari:

WITH high_paid_employees AS (
  SELECT 
      employee_id, 
      employee_name, 
      salary
  FROM 
      employees
  WHERE 
      salary > 100000
)
SELECT 
    * 
FROM 
    high_paid_employees;

Domanda 23: Che cos'è un totale progressivo e come si calcola in SQL?

Un totale corrente, noto anche come somma cumulativa, è la somma di un valore su un insieme di righe in un ordine particolare. In SQL, un totale progressivo può essere calcolato utilizzando SUM() e la clausola OVER().

La seguente query calcola il totale progressivo di order_amount su tutte le righe della tabella orders ordinate per order_date:

SELECT 
    order_date, 
    order_amount,
    SUM(order_amount) OVER (ORDER BY order_date) AS running_total
FROM 
    orders;

Domanda 24: Che cos'è una media mobile e come si calcola in SQL?

Una media mobile rappresenta la media di un insieme di valori su un insieme di tempi, in cui la finestra si"sposta" lungo l'insieme dei dati. In SQL è possibile calcolare una media mobile utilizzando AVG() con OVER() e specificando una finestra.

La seguente query calcola la media mobile dei valori per la riga corrente e le due righe precedenti, ordinate per data.

SELECT 
    date, 
    value,
    AVG(value) OVER (ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS moving_average
FROM 
    dataset;

Domanda 25: Come si calcola la differenza anno per anno in SQL?

Per calcolare la differenza da un anno all'altro in SQL, utilizzare funzioni come LAG() per confrontare i valori tra righe consecutive.

La seguente query calcola la differenza di fatturato da un anno all'altro sottraendo il fatturato dell'anno in corso da quello dell'anno precedente:

SELECT 
    year, 
    revenue,
    revenue - LAG(revenue, 1) OVER (ORDER BY year) AS year_to_year_difference
FROM 
    yearly_revenue;

Più aiuto con le domande del colloquio SQL per gli analisti di dati

La conoscenza del linguaggio SQL è essenziale per il successo di un analista di dati. Permette di interagire in modo efficiente con i database relazionali, semplificando il recupero, la manipolazione e i calcoli statistici dei dati. Affinando le vostre competenze in SQL, potrete affrontare con sicurezza i colloqui per analisti di dati.

Ricordate: la pratica rende perfetti. Considerate la possibilità di iscrivervi a uno dei nostri corsi interattivi, come SQL per l'analisi dei dati. Sul nostro blog potete trovare molti altri esempi di domande per i colloqui, come l'articolo Le 27 migliori domande di intervista su SQL avanzato con le relative risposte. Sarete pronti a superare il colloquio in men che non si dica!