Interview SQL question

19

Étant donné une table «employés»

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

Seule l'utilisation de SQL permet de trouver toutes les variantes de transfert d'employés d'un département à un autre, de sorte que le salaire moyen dans les départements «départ» et «arrivée» a augmenté.

PS: on m'a posé la question lors d'une interview, qui n'a jamais donné de réponse, et Google ne sert à rien.

Alexandre
la source
5
J'espère que la réponse à laquelle ils s'attendaient était "Pourquoi les noms de table et de colonne en minuscules et pourquoi souligne-t-il plutôt que le boîtier de chameau"
Mikey Mouse
@MikeyMouse: pourquoi pas? Le cas de chameau est le moyen préféré d'écrire les noms de table en SQL (du moins d'où je viens)
a_horse_with_no_name

Réponses:

22

Vous recherchez donc des employés qui gagnent en dessous de la moyenne dans leur département actuel mais au-dessus de la moyenne dans leur nouveau département potentiel.

Une façon possible d'obtenir tous les transferts d'employés qui répondraient à ce

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 
Martin Smith
la source
Comment savez-vous quel département est "nouveau" et lequel est "ancien"?
mustaccio
1
@mustaccio - Le département dans lequel ils se trouvent actuellement est dans le tableau employees. Cela permet de trouver tous les services vers lesquels ils pourraient être transférés (le cas échéant) qui remplissent la condition.
Martin Smith
10

Étant donné qu'il s'agissait d'une question d' entrevue (et non d'une question test ), il existe quelques possibilités selon le contexte.

La question est incomplète comme indiqué et ne peux pasil ne faudrait peut-être pas répondre dans sa forme actuelle ( voir la section MISE À JOUR ci-dessous ). Que manque-t-il? Eh bien, par exemple:

  • La question porte-t-elle sur les transferts passés ou les transferts futurs potentiels? Il y a une ambiguïté dans le libellé.
  • Y a-t-il d'autres champs dans ce tableau ou est-ce tous? Si c'est vrai, que sont-ils?
  • Y a-t-il des contraintes ou des index définis sur cette table? Où est le reste du schéma?
  • S'agit-il d'un système OLTP ou OLAP?

S'il s'agit davantage d'une table OLTP, alors il devrait y avoir une contrainte PK / Unique Index / Unique définie sur le employee_idchamp. Et dans ce cas, il n'y aurait qu'une seule entrée par employee_idet donc aucun moyen de déterminer les transferts (c'est-à-dire qu'il n'y a pas de «vieux» department_idenregistrement).

S'il s'agit davantage d'une table OLAP, il peut s'agir d'une dimension à évolution lente, auquel cas il y aurait plusieurs employee_idenregistrements. Mais, il faudrait aussi être ValidFromet ValidTochamps DATE / DATETIME de sorte que le départ et l' arrivée départements peuvent être déterminés dans leur bon ordre. Sans ces champs, il n'y a aucun moyen de déterminer quel département est le départ et lequel est l' arrivée . Et ne pas connaître cette distinction permettrait de récupérer des enregistrements qui sont à l'opposé de la demande.

Donc, ce "contexte" pour interpréter cette question est la raison pour laquelle la question est formulée telle qu'elle est.

  • Vous avez oublié quelques détails entre l'interview et la poser ici:

    Cela arrive, mais si c'est le cas, alors soit vous devez mettre à jour la question pour remplir les informations manquantes, soit cela restera sans réponse (au moins en termes d'obtention d'une réponse significative).

  • La question a été transcrite avec précision ici, et ces questions n'étaient pas connues de l'enquêteur ou des enquêteurs ou n'étaient pas destinées à lui:

    Dans ce cas, si vous étiez au courant de ces problèmes et qu'ils attendaient une réponse, vous pouvez l'utiliser comme un moyen de les éliminer en tant qu'employeur possible ;-).

  • La question a été transcrite avec précision ici, et ces questions étaient connues de l'enquêteur ou des enquêteurs:

    Dans ce cas, ils utilisaient probablement cela comme un moyen d'éliminer les gens en examinant plus que la capacité technique brute. Il est souvent très important de poser des questions pour être très clair sur le projet sur lequel vous travaillez, car la plupart des utilisateurs finaux et des propriétaires de produits, etc. ne pensent / parlent pas dans les détails techniques de bas niveau et omettent souvent les éléments nécessaires. Il est important de ne pas supposer, mais plutôt de retourner à la source de la demande pour obtenir des éclaircissements afin de ne pas perdre de temps à travailler dans la mauvaise direction.

    N'oubliez pas que vous n'interviewez pas pour un poste afin de simplement répondre à des questions techniques dans le vide. Vous êtes en entrevue pour un poste pour travailler sur des projets et il y aura toujours des ambiguïtés et / ou des informations trompeuses dans ce que l'on vous demande de faire. Un bon intervieweur essaiera de comprendre à la fois votre niveau de compétence et si vous serez réellement productif. J'ai posé des questions comme celle-ci en interviewant des gens pour éliminer les gens qui répondent bien aux questions techniques mais qui auraient besoin de trop de main et finiraient par ralentir l'équipe.


MISE À JOUR:

Juste pour clarifier la clarification pour ceux qui pensent qu'il s'agit d'une simple question de compétence, interprétée comme @Martin l'a fait dans sa réponse: nous ne savons même pas si c'est le libellé exact de la question qui a été présentée au PO Mais nous savons, dans la mesure où nous pouvons faire confiance à la situation, que cela a été donné dans une interview. Et bonles enquêteurs posent des questions qui non seulement font ressortir les compétences techniques des candidats, mais aussi leurs compétences non techniques / "non techniques". Il se pourrait très bien que Martin ait raison dans son interprétation que la question porte sur les futures combinaisons de transfert possibles (c'est-à-dire "parfois un cigare n'est qu'un cigare"). Et s'il s'agissait d'une question test, je serais surpris si sa réponse n'était pas correcte. Mais ce n'est pas une question test. Bien sûr, il pourrait s'agir d'une question d'entrevue posée par quelqu'un qui n'essaie pas de voir quel type de personne le candidat est et comment il se comporterait lors d'une réunion de conception où de telles ambiguïtés surgissent plus souvent que la plupart des gens ne le remarquent. Mais aucune réponse n'a été donnée,fait avancer les choses (recherchez sur la page "Vous cherchez des gens qui", mais vous devriez vraiment lire le tout). Donc, entre deux candidats qui sont égaux à tous égards, mais l'un a supposé l'interprétation et était correct, tandis que l'autre a posé des questions et a ensuite obtenu la bonne réponse, j'irais certainement avec celui qui a posé la première.

Solomon Rutzky
la source
6
"toutes les variantes" me semble clair qu'il s'agit de transferts hypothétiques et non de transferts historiques. Et puis la question est parfaitement répondable avec les informations données.
Martin Smith
7
Je suis avec Martin. La question est claire pour moi et suffisamment d'informations répondent à la question.
paparazzo
3
@MartinSmith Je ne dis pas que votre interprétation n'est pas valide ou qu'elle n'est pas la plus probable. Je dis que ce n'est pas le seul . Il y a souvent des moments où le libellé de quelque chose "semble" clair, mais est toujours incorrect ;-) Comme je l'ai dit au début, ma réponse est à la lumière qu'il s'agit d'une question d'entrevue, pas d'une question test. Et on m'a souvent demandé de faire des choses qui étaient "clairement" énoncées, mais qui n'étaient pas du tout ce que la personne voulait vraiment, mais elles ne savaient pas qu'elles demandaient la mauvaise chose parce qu'elles supposaient que tout le monde était d'accord sur la terminologie.
Solomon Rutzky
2
@ edc65 Merci. Étant donné que ma préoccupation concerne l'ambiguïté, j'apprécie l'ambiguïté ironique de votre commentaire :).
Solomon Rutzky
2
@srutzky Je suppose que je suis le seul à vous accompagner ici :) Merci d'avoir ajouté votre réponse au mélange. En tant que personne qui a mené des centaines d'entrevues, c'est le type de réponse réfléchie que je rechercherais. Je ne poserais probablement pas cette question, mais si je le faisais, un candidat idéal répondrait probablement de la même manière, puis, après clarification, rédigerait une requête comme celle de Martin. La principale leçon à tirer de la lecture de ces commentaires est que les gens voient les choses de différentes manières et font des hypothèses différentes. Alors, clarifiez et confirmez toujours vos hypothèses, surtout dans une situation d'entrevue!
Geoff Patterson