Forberedelse til kodeinterviews · Lektion

MIN, MAX og ikke-numerisk aggregering

Aggregér datoer og strenge, og forstå betydningen af MIN for tekst

Lektion 3 af 413 trin

MIN, MAX og ikke-numerisk aggregering er en gratis Forberedelse til kodeinterviews-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Forberedelse til kodeinterviews, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Forberedelse til kodeinterviews-kurset indeholder 4 lektioner i alt.

MIN og MAX ud over tal

Kandidater antager, at MIN og MAX kun fungerer på tal. Interviewere elsker at spørge: "Hvad returnerer MAX(name)? Hvad med MIN(order_date)?"

Sandheden er, at MIN og MAX fungerer på alle typer, der kan sorteres — tal, datoer og tekststrenge. Den egentlige færdighed, der testes her, er at forstå sorteringsreglerne for hver type.

Det numeriske tilfælde

Lad os begynde med det velkendte. I numeriske kolonner returnerer MIN den mindste værdi, og MAX den største. Enkelt.

Som andre aggregatfunktioner ignorerer MIN og MAX NULL-værdier. En NULL-værdi er aldrig den mindste eller største; den springes blot over. Hvis alle værdier er NULL, returnerer begge NULL.

SELECT MIN(salary) AS lowest, MAX(salary) AS highest
FROM employees;

MIN og MAX på datoer

Datoer og tidsstempler kan ordnes fuldt ud, så MIN(order_date) giver den tidligste dato, og MAX(order_date) giver den seneste.

Sådan besvarer du spørgsmålene "hvornår blev den første ordre afgivet?" (MIN) og "hvad er den seneste aktivitet?" (MAX) uden at sortere og begrænse resultatet. Det er den idiomatiske, mængdebaserede løsning.

SELECT
  MIN(order_date) AS first_order,
  MAX(order_date) AS latest_order
FROM orders;

Datointerval i én forespørgsel

Et almindeligt opfølgende spørgsmål er: "Hvor længe har denne kunde været aktiv?" Kombinér MIN og MAX, og træk dem derefter fra hinanden.

Det beregner tidsrummet mellem den første og den sidste ordre. Den præcise syntaks for subtraktion varierer mellem dialekter, men MIN/MAX-idéen er universel og viser, at du kan udtrykke intervaller deklarativt.

SELECT
  customer_id,
  MIN(order_date) AS first_order,
  MAX(order_date) AS last_order,
  MAX(order_date) - MIN(order_date) AS active_days
FROM orders
GROUP BY customer_id;

MIN og MAX på strenge

Her er det, der overrasker mange. I tekstkolonner bruger MIN og MAX leksikografisk (alfabetisk) sorteringsrækkefølge baseret på kolonnens kollationering.

Så MIN(name) returnerer det navn, der kommer først alfabetisk, og MAX(name) det, der kommer sidst. MIN over {'Carol', 'Alice', 'Bob'} returnerer 'Alice'; MAX returnerer 'Carol'.

SELECT MIN(name) AS first_alpha, MAX(name) AS last_alpha
FROM employees;
-- with Alice, Bob, Carol: 'Alice' and 'Carol'

Kollationering og forskel på store og små bogstaver

Sorteringsrækkefølgen for strenge afhænger af kollationering, som styrer forskellen på store og små bogstaver samt lokalitetsregler. Med mange standardkollationeringer kan store bogstaver komme før små bogstaver, så MAX for {'apple', 'Banana'} kan overraske dig.

Ved en jobsamtale skal du nævne, at MIN/MAX-resultater for strenge afhænger af kollationeringen. Den nuance adskiller et svar, du har lært udenad, fra ægte forståelse.

Hvad MIN(text) IKKE betyder

En almindelig misforståelse er, at MIN(name) returnerer den korteste streng, eller at MAX(name) returnerer den længste. Det gør de ikke. Det handler udelukkende om sorteringsrækkefølge, ikke om længde.

Hvis du faktisk har brug for den længste streng, sorterer du efter LENGTH(name) og vælger den øverste række, eller bruger MAX(LENGTH(name)), hvis du kun skal bruge længden. Forveksl ikke sortering efter værdi med sortering efter længde.

SELECT MAX(LENGTH(name)) AS longest_name_length
FROM employees;

MIN/MAX kombinerer ikke kolonner

En vigtig faldgrube: MIN og MAX arbejder uafhængigt på én enkelt kolonne. De returnerer ikke hele den række, der indeholder minimums- eller maksimumsværdien.

Hvis du skriver SELECT MIN(salary), name uden gruppering, får du ikke navnet på den lavest lønnede — du får en fejl eller et vilkårligt navn afhængigt af dialekten. Hvis du vil hente hele rækken, skal du bruge ORDER BY + LIMIT eller en vinduesfunktion.

-- Wrong assumption: this does NOT give the lowest earner's name.
-- Correct approach to get the whole row:
SELECT name, salary
FROM employees
ORDER BY salary ASC
LIMIT 1;

Opsummering af NULL-adfærd for MIN/MAX

Ligesom SUM og AVG ignorerer MIN og MAX NULL-værdier. En NULL er hverken den mindste eller den største værdi.

  • Blandede værdier + NULL-værdier: NULL-værdier ignoreres, og det reelle minimum/maksimum returneres.
  • Kun NULL-værdier eller ingen rækker: MIN og MAX returnerer NULL.

Denne ensartethed på tværs af aggregater er en god pointe at fremhæve: "Alle standardaggregater ignorerer NULL-værdier."

Brug i en gruppe

MIN og MAX er særligt nyttige sammen med GROUP BY, når du vil finde yderpunkter for hver gruppe. "Højeste løn pr. afdeling" er et klassisk eksempel.

Dette returnerer én række pr. afdeling med afdelingens højeste løn. Husk: Det giver dig værdien, ikke medarbejderen. At koble navnet til den er et separat og almindeligt opfølgende problem.

SELECT department, MAX(salary) AS top_salary
FROM employees
GROUP BY department;

Sådan svarer du sikkert

Et stærkt svar ved en jobsamtale er: "MIN og MAX fungerer på alle typer, der kan sorteres. For tal er de henholdsvis mindst/størst, for datoer tidligst/senest, og for strenge er rækkefølgen alfabetisk efter kolonnens kollationering. De ignorerer NULL-værdier og returnerer kun NULL, når der ikke findes nogen værdi, som ikke er NULL. De returnerer én værdi, ikke hele rækken, så hvis jeg skal hente rækken, vil jeg bruge ORDER BY sammen med LIMIT eller en vinduesfunktion."

Hurtigt tjek

Tænk over aggregater på strenge.

Opsummering

Alt om MIN og MAX:

  • Fungerer på alle typer, der kan sorteres: tal, datoer og strenge.
  • Strenge bruger alfabetisk rækkefølge efter kollationering, ikke længde.
  • Datoer: MIN = tidligst, MAX = senest.
  • De ignorerer NULL-værdier; kun NULL-værdier eller ingen rækker giver NULL.
  • De returnerer en værdi, ikke hele rækken — brug ORDER BY + LIMIT til det.

Næste emne: hvad der sker, når du bruger aggregater uden GROUP BY.

Gratis at komme i gang

Lær Forberedelse til kodeinterviews med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
90
Lektioner
360

Ofte stillede spørgsmål

Er lektionen “MIN, MAX og ikke-numerisk aggregering” gratis?

Ja — hele teksten til “MIN, MAX og ikke-numerisk aggregering” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Forberedelse til kodeinterviews-kurset, skal du opgradere til CoddyKit PRO. Forberedelse til kodeinterviews-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “MIN, MAX og ikke-numerisk aggregering”?

Aggregér datoer og strenge, og forstå betydningen af MIN for tekst Du øver dig i Forberedelse til kodeinterviews med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Forberedelse til kodeinterviews?

Der kræves ingen tidligere erfaring. Forberedelse til kodeinterviews på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “MIN, MAX og ikke-numerisk aggregering”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Forberedelse til kodeinterviews-lektion?

Ja. Alle Forberedelse til kodeinterviews-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. COUNT(*) kontra COUNT(kolonne) kontra COUNT(DISTINCT)
  2. SUM og AVG med NULL'er
  3. MIN, MAX og ikke-numerisk aggregering
  4. Aggregater uden GROUP BY
← Tilbage til Forberedelse til kodeinterviews