sql >> Database teknologi >  >> RDS >> Mysql

Svarende til GroupBy og Having-klausul i relationel algebra

Bemærk, at du ønsker at få summen af ​​løn i Tutorial D :

SUMMARIZE emp BY { job } ADD ( SUM ( sal ) AS total_sal )

Noteaggregering er ikke en relationel operator, og vil derfor ikke udgøre en del af en relationel algebra.

Med hensyn til HAVING , er det en historisk anomali. Før SQL-92-standarden var det ikke muligt at skrive SELECT udtryk i FROM klausul (a.k.a afledte tabeller), dvs. du skulle udføre alt arbejde i én SELECT udtryk. På grund af SQLs rigide evalueringsrækkefølge opstår den samlede værdi ikke efter WHERE klausulen er blevet evalueret, dvs. det var umuligt at anvende begrænsning baseret på aggregerede værdier. HAVING blev indført for at løse dette problem.

Men selv med HAVING , SQL forblev relationelt ufuldstændig med hensyn til Codd's, indtil afledte tabeller var blevet introduceret. Afledte tabeller gengivet HAVING overflødig, men bruger HAVING er stadig populær (hvis Stackoverflow er noget at gå efter):folk ser stadig ud til at kunne lide at bruge en enkelt SELECT hvor det er muligt og SQL's førnævnte rigiditet med hensyn til evalueringsrækkefølge (projektion udføres sidst i en SELECT expression) gør brugen af ​​afledt tabel ret omfattende sammenlignet med HAVING .



  1. Rails 3 - pludselig afventende migreringsfejl

  2. Sådan bruger du skabeloner i SQL Server Management Studio (SSMS) - SQL Server / TSQL Tutorial Del 16

  3. Sådan bruger du Query Designer i SQL Server

  4. MySql - Sequalize - Kan ikke tilføje fremmednøglebegrænsning