Sehr anspruchsvolles SQL-Interview (gespeicherte Prozedur kann nicht verwendet werden)

8

Sie haben eine SQL-Tabelle table mit zwei Spalten: name und pen . Beide Spalten sind Textzeichenfolgen.

%Vor%

Der Name der Person wird als Eingabeargument angegeben.

Bitte schreiben Sie eine SQL-Anweisung (keine gespeicherte Prozedur), die Namen von Personen mit einem einzigartigen Satz von Stiften zurückgibt, die äquivalent oder breiter / größer als der Satz von Stiften einer bestimmten Person ist.

Beispiele:

  • Eingabe: Mike
  • Ausgabe: anton

Mike hat (rot, blau, grün).
Anton hat mehr Gadgets (rot, blau, grün) + schwarz.

  • Eingabe: Steve
  • Ausgabe: alex

Steve hat (rot, gelb).
Alex hat (rot, gelb) + grün + schwarz.
Mike, Anton sind nicht gedruckt - sie haben kein Gelb.

  • Eingabe: alex
  • Ausgabe:
user1055108 20.11.2011, 12:02
quelle

7 Antworten

13

Hier ist eine Möglichkeit ( Online-Demo ) unter der Annahme, dass der Eingabe-Name "steve" lautet.

Dies kann so umformuliert werden wie "Suche nach allen Benutzern, für die es keinen Stift gibt, den Steve besitzt, den sie nicht besitzen"

%Vor%

Siehe diesen Artikel für andere Techniken

    
Martin Smith 20.11.2011 12:22
quelle
1
%Vor%     
Rahul 11.07.2014 12:48
quelle
0
%Vor%     
Nikhil Shinde 23.12.2013 10:57
quelle
0
%Vor%     
Marcelo Vollbrecht 01.05.2015 08:26
quelle
0

Wir können die analytische LEAD-Funktion verwenden, um diese Lösung zu erreichen.

Die Abfrage wäre

%Vor%

Die Unterabfrage gibt die Ergebnisse wie folgt

Name | CNT | nächster_name

Mike 3 | Steve

steve | 2 | anton

Anton | 4 | Alex

alex | 4 | (null)

Dann filtert die out-Abfrage die Zeile, die benötigt wird, und gibt die next_name an, nach der wir suchen.

    
Rajendra 27.05.2016 19:01
quelle
0

Erstellen Sie Tabellenübungen (  Name varchar (10), Stifte varchar (10)

)  Praxis einfügen (Name, Stifte)  wähle 'mike', 'red' union  wähle 'mike', 'red' union  wähle 'mike', 'blue' union  wähle 'mike', 'green' union  Wählen Sie 'steve', 'red' union  Wählen Sie 'steve', 'yellow' union  Wählen Sie 'anton', 'blue' union  wähle 'anton', 'green' union  wähle 'anton', 'black' union  wähle 'anton', 'red' union  Wählen Sie 'alex', 'black' union  Wählen Sie 'alex', 'green' union  Wählen Sie 'alex', 'yellow' union  wähle 'alex', 'rot'

wähle # aus der Übung in #t aus

%Vor%

Wählen Sie einen eindeutigen Farbcode aus #t

/ * IMP-Code / aktualisiere #t Setze Nummer = ( Wählen Sie Anzahl () aus #t wo name = 'steve' und colourcode = 1 ) where name = 'steve' und colourcode = 1

/ * Sobald die obige update-Anweisung ausgeführt wurde, ändern Sie colourcode = 2 und führen Sie die Anweisung erneut aus                                               Ändern Sie den Farbcode = 3 und führen Sie die Anweisung erneut aus                                               Ändern Sie den Farbcode = 4 und führen Sie die Anweisung erneut aus                                               ändere colourcode = 5 und führe die Anweisung * /

erneut aus

/ * Folgen Sie dem gleichen Prozess für den Namen "alex", "anton" und "mike" * /

/ * Unten ist die Lösung * /

Wählen Sie den Namen aus #t wo Nummer = ( Wählen Sie eine eindeutige Nummer aus #t wo Farbcode = 3 und Nummer = 1)

    
Raman 03.06.2016 14:30
quelle
0
%Vor%     
Mahi 14.03.2017 06:18
quelle

Tags und Links