Intervista alla domanda SQL


19

Dato un tavolo "dipendenti"

 employee_id | salary | department_id 
-------------+--------+---------------

Solo usando SQL trovi tutte le varianti dei trasferimenti di dipendenti da un dipartimento all'altro, in modo che lo stipendio medio sia nel reparto 'partenza' che 'arrivo' sia cresciuto.

PS Mi è stata posta la domanda in un'intervista, che non ha mai dato una risposta, e Google non è di grande aiuto.


5
Spero che la risposta che si aspettavano fosse "Perché la tabella minuscola e i nomi delle colonne e perché il carattere di sottolineatura anziché il rivestimento del cammello"
Mikey Mouse,

@MikeyMouse: perché no? Il caso Camel è il modo preferito per scrivere i nomi delle tabelle in SQL (almeno da dove vengo io)
a_horse_with_no_name il

Risposte:


22

Quindi stai cercando Dipendenti che guadagnano al di sotto della media nel loro attuale dipartimento ma al di sopra della media nel loro potenziale nuovo dipartimento.

Un modo possibile per ottenere tutti i trasferimenti di dipendenti che soddisferebbero questo sarebbe

WITH departments
     AS (SELECT AVG(salary) AS AvgSalary,
                department_id
         FROM   employees
         GROUP  BY department_id)
SELECT e.employee_id,
       dept_current.department_id AS current_department_id,
       dept_new.department_id     AS new_department_id
FROM   employees e
       JOIN departments dept_current
         ON e.department_id = dept_current.department_id
            AND dept_current.AvgSalary > e.salary
       JOIN departments dept_new
         ON dept_new.AvgSalary < e.salary 

Come fai a sapere quale dipartimento è "nuovo" e quale è "vecchio"?
Mustaccio

1
@mustaccio - Il dipartimento in cui si trovano è nella tabella employees. Questo trova tutti i reparti che potrebbero trasferire (se presenti) che soddisfano la condizione.
Martin Smith,

10

Dato che questa era una domanda di intervista (e non una domanda di prova ), ci sono alcune possibilità a seconda del contesto.

La domanda è incompleta come indicato e non puòforse non dovrebbe ricevere risposta nella sua forma attuale ( consultare la sezione AGGIORNAMENTO di seguito ). Che cosa manca? Bene, per esempio:

  • La domanda è sui trasferimenti passati o potenziali trasferimenti futuri? C'è ambiguità nella formulazione.
  • Ci sono altri campi in questa tabella o sono tutti questi? Se sì, quali sono?
  • Ci sono vincoli o indici definiti in questa tabella? Dov'è il resto dello schema?
  • Si tratta di un sistema OLTP o OLAP?

Se si tratta più di una tabella OLTP, nel campo dovrebbe essere definito un vincolo PK / Index unico / Unique employee_id. E in quel caso, ci sarebbe una sola voce per employee_ide quindi nessun modo per determinare i trasferimenti (cioè non esiste un department_idrecord "vecchio" ).

Se si tratta più di una tabella OLAP, potrebbe trattarsi di una dimensione a modifica lenta, nel qual caso ci sarebbero più employee_idrecord. Tuttavia, dovrebbero essere presenti anche i campi DATA ValidFrome ValidToDATA / DATA in modo che i dipartimenti di partenza e di arrivo possano essere determinati nella sequenza corretta. Senza questi campi non c'è modo di determinare quale reparto è la partenza e quale è l' arrivo . E non sapere che questa distinzione consentirebbe di recuperare i record che sono l'opposto della richiesta.

Quindi, quel "contesto" per come interpretare questa domanda è il motivo per cui la domanda è dichiarata così com'è.

  • Hai dimenticato alcuni dettagli tra l'intervista e la domanda qui:

    Succede, ma se questo è il caso, allora o è necessario aggiornare la domanda per compilare le informazioni mancanti, o rimarrà senza risposta (almeno in termini di ottenere una risposta significativa).

  • La domanda è stata accuratamente trascritta qui e questi problemi non erano noti o non sono stati intesi dall'intervistatore:

    In questo caso, se eri a conoscenza di questi problemi e si aspettavano una risposta, puoi usarli come mezzo per eliminarli come possibili datori di lavoro ;-).

  • La domanda è stata accuratamente trascritta qui, e questi problemi erano noti o voluti dagli intervistatori:

    In questo caso, probabilmente stavano usando questo come mezzo per estirpare le persone guardando più che abilità tecniche crude. Spesso è molto importante porre domande per essere molto chiari sul progetto a cui stai lavorando poiché la maggior parte degli utenti finali e proprietari di prodotti, ecc. Non pensano / parlano con dettagli tecnici di basso livello e spesso tralasciano i pezzi necessari. È importante non presumere, ma piuttosto tornare alla fonte della richiesta per ottenere chiarimenti in modo da non perdere tempo a lavorare nella direzione sbagliata.

    Ricorda che non stai intervistando per una posizione per rispondere semplicemente a domande tecniche nel vuoto. Stai intervistando per una posizione per lavorare su progetti e ci saranno sempre ambiguità e / o informazioni fuorvianti in ciò che è richiesto di fare. Un buon intervistatore cercherà di comprendere sia il tuo livello di abilità sia se sarai effettivamente produttivo. Ho fatto domande proprio così quando ho intervistato persone per eliminare le persone che rispondono bene alle domande tecniche ma avrebbero bisogno di troppa mano e finirebbero per rallentare la squadra.


AGGIORNARE:

Giusto per chiarire il chiarimento per coloro che ritengono che questa sia una semplice domanda di abilità di query, interpretata come ha fatto @ Martin nella sua risposta: non sappiamo nemmeno se questa è la formulazione esatta della domanda che è stata presentata all'OP Ma sappiamo, per quanto possiamo fidarci della situazione, che questo è stato dato in un'intervista. E benegli intervistatori pongono domande che non solo attingono un'abilità tecnica dei candidati, ma anche le loro abilità non tecniche / "soft". Potrebbe benissimo essere che Martin abbia ragione nella sua interpretazione che la domanda si pone su potenziali combinazioni future di trasferimento (cioè "a volte un sigaro è solo un sigaro"). E se questa fosse una domanda di prova, sarei sorpreso se la sua risposta non fosse corretta. Ma questa non è una domanda di prova. Certo, potrebbe essere una domanda di intervista posta da qualcuno che non sta cercando di vedere che tipo di persona è il candidato e come si sarebbe esibito in una riunione di progettazione in cui tali ambiguità sorgono più spesso di quanto la maggior parte delle persone noti. Ma nessuna risposta è stata data,fa le cose (cerca nella pagina "Stai cercando persone che", ma dovresti davvero leggere tutto). Quindi, tra due candidati che sono uguali in tutti i modi, ma uno ha assunto l'interpretazione ed è stato corretto, mentre l'altro ha fatto domande e poi ha ottenuto la risposta corretta, andrei sicuramente con quello che ha posto per primo.


6
"tutte le varianti" mi sembra chiaro che stanno parlando di trasferimenti ipotetici e non di trasferimenti storici. E quindi la domanda è perfettamente rispondibile con le informazioni fornite.
Martin Smith,

7
Sono con Martin. La domanda mi è chiara e abbastanza informazioni rispondono alla domanda.
paparazzo,

3
@MartinSmith Non sto dicendo che la tua interpretazione non sia valida o che non sia la più probabile. Sto dicendo che non è l' unico . Ci sono volte in cui la formulazione di qualcosa "sembra" chiara, ma è ancora errata ;-) Come ho detto all'inizio, la mia risposta è alla luce del fatto che si tratta di una domanda di intervista, non di una domanda di prova. E ho spesso chiesto di fare cose che sono state "chiaramente", ha dichiarato, e tuttavia erano del tutto non ciò che la persona voleva davvero, ma non erano consapevoli che stavano chiedendo la cosa sbagliata perché presumevano tutti erano d'accordo sulla terminologia.
Solomon Rutzky,

2
@ edc65 Grazie. Dato che la mia preoccupazione riguarda l'ambiguità, apprezzo l'ambiguità ironica del tuo commento :).
Solomon Rutzky,

2
@srutzky Immagino di essere l'unico che è qui con te :) Grazie per aver aggiunto la tua risposta al mix. Come qualcuno che ha condotto centinaia di interviste, questo è il tipo di risposta ponderata che avrei cercato. Probabilmente non farei questa domanda, ma se lo facessi, un candidato ideale probabilmente risponderebbe in modo simile e quindi, dopo un chiarimento, scriverebbe una domanda come quella di Martin. Il principale asporto nel leggere questi commenti è che le persone vedono le cose in modi diversi e fanno ipotesi diverse. Quindi chiarisci e conferma sempre i tuoi presupposti, specialmente in una situazione di intervista!
Geoff Patterson,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.