Interview SQL Frage


19

Angesichts einer Tabelle "Mitarbeiter"

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

Nur mit SQL werden alle Varianten von Mitarbeiterübertragungen von einer Abteilung in eine andere gefunden, sodass das Durchschnittsgehalt sowohl in der Abteilungs- als auch in der Ankunftsabteilung gestiegen ist.

PS Mir wurde die Frage in einem Interview gestellt, das nie eine Antwort gab, und Google ist wenig hilfreich.


5
Ich hoffe, die Antwort, die sie erwartet hatten, war "Warum Kleinbuchstaben Tabellen- und Spaltennamen, und warum Unterstriche anstatt Kamelgehäuse"
Mikey Mouse

@MikeyMouse: warum nicht? Camel Case ist die bevorzugte Methode, um Tabellennamen in SQL zu schreiben (zumindest dort, wo ich herkomme)
a_horse_with_no_name

Antworten:


22

Sie suchen also Mitarbeiter, die in ihrer derzeitigen Abteilung unter dem Durchschnitt, in ihrer künftigen neuen Abteilung jedoch über dem Durchschnitt liegen.

Ein möglicher Weg, alle Mitarbeiter-Transfers zu erhalten, die dies erfüllen würden, wäre

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 

Woher wissen Sie, welche Abteilung "neu" und welche "alt" ist?
Mustaccio

1
@mustaccio - Die Abteilung, in der sie sich gerade befinden, befindet sich in der Tabelle employees. Hiermit werden alle Abteilungen ermittelt, die diese Bedingung erfüllen (sofern vorhanden).
Martin Smith

10

Da dies eine Interviewfrage (und keine Testfrage ) war, gibt es je nach Kontext einige Möglichkeiten.

Die Frage ist wie angegeben und unvollständig kann nichtSollte in der aktuellen Form möglicherweise nicht beantwortet werden ( siehe Abschnitt UPDATE weiter unten ). Was fehlt? Nun, zum Beispiel:

  • Stellt sich die Frage nach vergangenen Übertragungen oder möglichen zukünftigen Übertragungen? Der Wortlaut ist mehrdeutig.
  • Gibt es andere Felder in dieser Tabelle oder sind das alles? Wenn ja, was sind sie?
  • Gibt es Einschränkungen oder Indizes für diese Tabelle? Wo ist der Rest des Schemas?
  • Ist das ein OLTP-System oder OLAP?

Wenn dies eher eine OLTP-Tabelle ist, sollte für das employee_idFeld eine PK / Unique Index / Unique-Einschränkung definiert sein . Und in diesem Fall würde es nur einen Eintrag pro employee_idund daher keine Möglichkeit geben, Übertragungen zu bestimmen (dh es gibt keinen "alten" department_idDatensatz).

Wenn dies eher eine OLAP-Tabelle ist, kann dies eine sich langsam ändernde Dimension sein. In diesem Fall gibt es mehrere employee_idDatensätze. Es müssten jedoch auch Felder ValidFromund ValidToDATE / DATETIME vorhanden sein, damit die Abfahrts- und Ankunftsabteilungen in der richtigen Reihenfolge bestimmt werden können. Ohne diese Felder ist es nicht möglich zu bestimmen, welche Abteilung die Abfahrt und welche die Ankunft ist . Und wenn Sie diese Unterscheidung nicht kennen, können Sie Aufzeichnungen zurückerhalten, die das Gegenteil der Anforderung darstellen.

Dieser "Kontext" für die Interpretation dieser Frage ist der Grund, warum die Frage so gestellt wird, wie sie ist.

  • Sie haben einige Details zwischen dem Interview und der Frage hier vergessen:

    Es kommt vor, aber wenn dies der Fall ist, müssen Sie entweder die Frage aktualisieren, um die fehlenden Informationen einzufügen, oder sie bleibt unbeantwortet (zumindest, um eine aussagekräftige Antwort zu erhalten).

  • Die Frage wurde hier genau transkribiert, und diese Probleme waren dem / den Interviewer (n) nicht bekannt oder beabsichtigt:

    In diesem Fall, wenn Sie sich dieser Probleme bewusst waren und sie eine Antwort erwarteten, können Sie sie als möglichen Arbeitgeber aussortieren ;-).

  • Die Frage wurde hier genau transkribiert, und diese Probleme waren dem / den Interviewer (n) bekannt oder von ihm beabsichtigt:

    In diesem Fall nutzten sie dies wahrscheinlich, um die Leute auszusondern, indem sie mehr als nur die rohen technischen Fähigkeiten betrachteten. Oft ist es sehr wichtig , Fragen zu stellen , um seine sehr auf dem Projekt klar das Sie arbeiten , da die meisten Endnutzer und Produkt Besitzer, etc glaube nicht / spricht in Low-Level - technische Details und wird oft notwendig Stücke auslassen. Es ist wichtig, nicht anzunehmen, sondern zur Quelle der Anfrage zurückzukehren, um eine Klärung zu erhalten, damit Sie keine Zeit damit verschwenden, in die falsche Richtung zu arbeiten.

    Denken Sie daran, dass Sie sich nicht für eine Stelle bewerben, um einfach technische Fragen im luftleeren Raum zu beantworten. Sie werden interviewt, um eine Position für die Arbeit an Projekten zu erhalten, und es wird immer Unklarheiten und / oder irreführende Informationen darüber geben, was zu tun ist. Ein guter Interviewer versuchen , ein Verständnis sowohl Ihre Fähigkeiten zu erhalten und wenn Sie tatsächlich produktiv sein. Ich habe Fragen wie diese gestellt, wenn ich Leute befragte, um Leute auszusondern, die technische Fragen gut beantworten, aber zu viel Handarbeit benötigen und das Team am Ende verlangsamen würden.


AKTUALISIEREN:

Nur um die Klarstellung für diejenigen zu klären, die das Gefühl haben, dass dies eine einfache Frage zum Abfragen von Fähigkeiten ist, interpretiert wie @Martin es in seiner Antwort getan hat: Wir wissen nicht einmal, ob dies der genaue Wortlaut der Frage ist, die dem OP vorgelegt wurde Wir wissen, soweit wir der Situation vertrauen können, dass dies in einem Interview gegeben wurde. Und gutInterviewer stellen Fragen, die nicht nur die technischen Fähigkeiten eines Kandidaten auszeichnen, sondern auch seine nicht-technischen / "weichen" Fähigkeiten. Es könnte sehr gut sein, dass Martin in seiner Interpretation richtig liegt, dass die Frage nach möglichen zukünftigen Transferkombinationen gestellt wird (dh "manchmal ist eine Zigarre nur eine Zigarre"). Und wenn dies eine Testfrage wäre, wäre ich überrascht, wenn seine Antwort nicht korrekt wäre. Dies ist jedoch keine Testfrage. Klar, es könnte sich um eine Interviewfrage handeln, die von jemandem gestellt wird, der nicht versucht, herauszufinden, um welche Art von Person es sich bei dem Kandidaten handelt und wie sie sich bei einem Designtreffen verhalten, bei dem solche Unklarheiten häufiger auftreten, als die meisten Leute überhaupt bemerken. Aber es wurde keine Antwort gegeben,erledigt Dinge (suche auf der Seite nach "Du suchst nach Leuten, die", aber du solltest das Ganze wirklich lesen). Also, zwischen zwei Kandidaten, die in jeder Hinsicht gleich sind, von denen jedoch einer die Interpretation annahm und korrekt war, während der andere Fragen stellte und dann die richtige Antwort erhielt, würde ich auf jeden Fall mit demjenigen gehen, der zuerst fragte.


6
"Alle Varianten" scheinen mir klar zu sein, dass es sich um hypothetische Transfers handelt, nicht um historische Transfers. Und dann ist die Frage mit den gegebenen Informationen perfekt zu beantworten.
Martin Smith

7
Ich bin bei Martin. Die Frage ist mir klar und genügend Informationen beantworten die Frage.
Paparazzo

3
@MartinSmith Ich sage nicht, dass Ihre Interpretation nicht gültig ist oder dass es nicht die wahrscheinlichste ist. Ich sage, dass es nicht der einzige ist . Es gibt oft Zeiten, in denen der Wortlaut von etwas "klar scheint", aber immer noch falsch ist ;-) Wie ich am Anfang sagte, ist meine Antwort angesichts dessen, dass es sich um eine Interviewfrage handelt, keine Testfrage. Und ich wurde oft gebeten, Dinge zu tun, die "klar" formuliert waren und dennoch nicht das waren , was die Person wirklich wollte, aber sie wussten nicht, dass sie nach dem Falschen fragten, weil sie annahmen, dass sich alle auf eine Terminologie einigten.
Solomon Rutzky

2
@ edc65 Danke. In Anbetracht der Tatsache, dass es mir um Mehrdeutigkeiten geht, schätze ich die zweideutige Zweideutigkeit Ihres Kommentars :).
Solomon Rutzky,

2
@srutzky Ich schätze, ich bin der einzige, der hier bei dir ist :) Vielen Dank, dass du dem Mix deine Antwort hinzugefügt hast. Als jemand, der Hunderte von Interviews geführt hat, ist dies die Art von nachdenklicher Antwort, nach der ich suchen würde. Ich würde diese Frage wahrscheinlich nicht stellen, aber wenn ich das täte, würde ein idealer Kandidat wahrscheinlich ähnlich antworten und dann, nach Klärung, eine Anfrage wie die von Martin schreiben. Die wichtigste Erkenntnis beim Lesen dieser Kommentare ist, dass die Menschen die Dinge auf unterschiedliche Weise sehen und unterschiedliche Annahmen treffen. Erklären und bestätigen Sie also immer Ihre Annahmen, insbesondere in einer Interview-Situation!
Geoff Patterson
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.