Ved første øjekast er MySQL MAX()
og GREATEST()
funktioner udfører en lignende operation. De returnerer begge den maksimale værdi fra en række værdier. Der er dog forskel på disse to funktioner.
Den bedste måde at se forskellen mellem disse to funktioner på er at sammenligne deres syntaks.
Syntaks
Syntaksen for hver funktion ser sådan ud:
MAX([DISTINCT] expr) [over_clause] GREATEST(value1,value2,...)
Så allerede nu ser de helt anderledes ud. MAX()
funktionen accepterer DISTINCT
søgeord samt en OVER
klausul (og GREATEST()
funktionen gør det ikke).
Den vigtigste forskel mellem disse to funktioner er dog i de accepterede argumenter. Specifikt:
MAX()
accepterer ét argumentGREATEST()
accepterer flere argumenter
Så MAX()
bruges typisk til at returnere den maksimale værdi i en kolonne i en database. Tabellen kan indeholde mange rækker, men denne funktion returnerer den med den maksimale værdi.
GREATEST()
på den anden side returnerer argumentet med maksimal værdi fra listen over argumenter, der er sendt til det. Så du kan sende f.eks. 3 argumenter til denne funktion, og den vil returnere den med den største værdi.
Eksempel 1 – MAX()-funktionen
Her er et eksempel til at demonstrere MAX()
funktion.
SELECT MAX(Population) AS 'Result' FROM City;
Resultat:
+----------+ | Result | +----------+ | 10500000 | +----------+
Dette eksempel finder byen med den største befolkning fra City
bord. Kolonnen, der indeholder befolkningen for hver by, kaldes Population
.
Nøglepunktet ved dette eksempel er, at der kun blev leveret et argument til funktionen, men der blev spurgt til flere rækker.
Hvis du prøver at sende flere argumenter til MAX()
funktion får du en fejl.
Eksempel 2 – Den STØRSTE() funktion
Her er et eksempel til at demonstrere GREATEST()
funktion.
SELECT GREATEST(1, 5, 9) AS 'Result';
Resultat:
+--------+ | Result | +--------+ | 9 | +--------+
Så i dette tilfælde giver vi tre argumenter. Hvert argument sammenlignes med det andet. Dette er i modsætning til det enkelte argument, der er givet til MAX()
funktion.
Hvis du prøver at sende et enkelt argument til GREATEST()
funktion får du en fejl.