Heim > Datenbank > MySQL-Tutorial > Vier klassische SQL-Programmierprobleme

Vier klassische SQL-Programmierprobleme

伊谢尔伦
Freigeben: 2016-12-03 10:30:51
Original
1111 Leute haben es durchsucht

1. Numerische Hilfstabelle

Die numerische Hilfstabelle ist eine einfache Tabelle, die nur N ganze Zahlen von 1 bis N enthält. N ist normalerweise sehr groß. Die numerische Hilfstabelle ist ein sehr leistungsfähiges Werkzeug, daher erstellen wir eine persistente numerische Hilfstabelle:

CREATETABLENums(     a INTUNSIGNED NOTNULLPRIMARYKRY
    )ENGINE=InnoDB;  
CREATEPRODURE CreateNums (t INTUNSIGNED ) BEGIN DECLAREs INTUNSIGNED DEFAULT1; TRUNCATETABLENums; INSERTINTONums SELECTs; WHILE s*2 <= t DO                       
BEGIN INSERTINTONums SELECTa+s FROMNums; SETs = s*2 END; ENDWHILE; END;
Nach dem Login kopieren

2. Kontinuierlicher Bereich

CREATETABLEt (a INTUNSIGNED NOTNULLPRIMARYKEY); INSERTINTOt VALUES(1); INSERTINTOt VALUES(2); INSERTINTOt VALUES(3); INSERTINTOt VALUES(100); 
INSERTINTOt VALUES(101); INSERTINTOt VALUES(103); INSERTINTOt VALUES(104); INSERTINTOt VALUES(105);
Nach dem Login kopieren


Wie erhalte ich das folgende Ausgabeergebnis?

Vier klassische SQL-Programmierprobleme

SELECTMIN(a) start,MAX(a) endFROM(    SELECTa,rn,a-rn ASdiff    FROM(SELECTa,@a:=@a+1 rn FROMt,(SELECT@a:=0) ASa)    ASb )ASc GROUPBYdiff;
Nach dem Login kopieren


3. Mindestens fehlende Werte

Klicken Sie (hier), um es zu reduzieren oder zu öffnen

CREATETABLEx(   a INTUNSIGNED PRIMARYKEY,   b CHAR(1) NOTNULL )ENGINE = InnoDB;   
INSERTINTOx SELECT3,&#39;a&#39;; INSERTINTOx SELECT4,&#39;b&#39;; INSERTINTOx SELECT6,&#39;c&#39;; INSERTINTOx SELECT7,&#39;d&#39;;
Nach dem Login kopieren


Beachten Sie, dass Spalte a eine positive Ganzzahl sein muss, daher ist der Typ hier INT UNSGINED. Das Problem mit minimalen fehlenden Werten besteht darin, dass die Abfrage unter der Annahme, dass Spalte a bei 1 beginnt, für die Daten 3, 4, 6, 7 in der aktuellen Tabelle 1 zurückgeben sollte. Wenn die Daten in der aktuellen Tabelle 1, 2, 3, 4, 6, 7 sind, wird 5 zurückgegeben.

Die Lösung lautet wie folgt:

SELECT
CASE
WHENNOTEXISTS (SELECTa FROMx WHEREa=1)THEN1
ELSE (SELECTMIN(a)+1 ASmissing FROMx ASA
WHERENOTEXISTS (SELECT* FROMx ASB
WHEREA.a+1=B.a)) ENDASmissing;
Nach dem Login kopieren

Führen Sie die obige SQL aus und das Ergebnis ist 1. Wenn Sie 1 und 2 in Spalte a einfügen, ist das Ergebnis 5.

Um den kleinsten fehlenden Wert auszufüllen, lautet die Lösung wie folgt:

INSERTINTOx SELECT
CASE
WHENNOTEXISTS (SELECTa FROMx WHEREa=1)THEN1
ELSE (SELECTMIN(a)+1 ASmissing FROMx ASA
WHERENOTEXISTS (SELECT* FROMx ASB
WHEREA.a+1=B.a)) ENDASmissing, &#39;p&#39;;
Nach dem Login kopieren

Führen Sie das obige SQL aus. Wir werden 5 in Spalte a und b einfügen füge 'p' ein.

4. Ermitteln Sie die Zeilennummer

Die Zeilennummer bezieht sich auf die fortlaufende Ganzzahl, die den Zeilen der Abfrageergebnismenge der Reihe nach zugewiesen wird.

CREATETABLEsales (   empid varchar(10) NOTNULL,   mgrid varchar(10) NOTNULL,   qty` int(11) NOTNULL,
  PRIMARYKEY(empid)
);
 
INSER INTOsalses VALUES(&#39;A&#39;,Z&#39;,300);
INSER INTO salses VALUES(&#39;B&#39;,X&#39;,100);
INSER INTOsalses VALUES(&#39;C&#39;,Y&#39;,100);
INSER INTO salses VALUES(&#39;D&#39;,Z&#39;,300);
INSER INTOsalses VALUES(&#39;E&#39;,X&#39;,200);
INSER INTO salses VALUES(&#39;F&#39;,Z&#39;,100);
Nach dem Login kopieren

Jetzt führen wir Zeilennummernstatistiken basierend auf empid durch

SELECTempid,  (SELECTCOUNT(*) FROMsales AST2
WHERET2.empid <= T1.empid) ASrownum FROMsales AST1;
Nach dem Login kopieren


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage