MIN, MAX og aggregering av ikke-numeriske verdier
Aggregering av datoer og tekst, og betydningen av MIN for tekst.
MIN, MAX og aggregering av ikke-numeriske verdier er en gratis leksjon i Forberedelse til kodeintervjuer på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Forberedelse til kodeintervjuer, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Forberedelse til kodeintervjuer inneholder totalt 4 leksjoner.
MIN og MAX utover tall
Kandidater antar at MIN og MAX bare fungerer på tall. Intervjuere liker å spørre: «Hva returnerer MAX(name)? Hva med MIN(order_date)?»
Sannheten er at MIN og MAX fungerer på alle sorterbare datatyper — tall, datoer og tekststrenger. Det er forståelsen av sorteringsreglene for hver type som egentlig testes her.
Det numeriske tilfellet
La oss begynne med det kjente. I numeriske kolonner returnerer MIN den minste verdien og MAX den største. Enkelt.
I likhet med andre aggregatfunksjoner ignorerer MIN og MAX NULL-verdier. En NULL-verdi er aldri den minste eller største; den hoppes ganske enkelt over. Hvis alle verdier 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 sorteres fullt ut, så MIN(order_date) gir den tidligste datoen, mens MAX(order_date) gir den seneste.
Slik svarer du på «når ble den første bestillingen lagt inn?» (MIN) og «hva er den nyeste aktiviteten?» (MAX) uten å sortere og begrense resultatet. Dette er den idiomatiske, settbaserte løsningen.
SELECT
MIN(order_date) AS first_order,
MAX(order_date) AS latest_order
FROM orders;Datointervall i én spørring
Et vanlig oppfølgingsspørsmål er: «Hvor lenge har denne kunden vært aktiv?» Kombiner MIN og MAX, og trekk deretter den ene fra den andre.
Dette beregner tidsrommet mellom den første og den siste bestillingen. Den nøyaktige syntaksen for subtraksjon varierer mellom dialekter, men MIN/MAX-ideen er universell og viser at du kan uttrykke 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å strenger
Her er delen som overrasker mange. For tekstkolonner bruker MIN og MAX leksikografisk (alfabetisk) rekkefølge basert på kolonnens kollasjon.
Dermed returnerer MIN(name) navnet som sorteres først alfabetisk, mens MAX(name) returnerer det som sorteres sist. 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'Kollasjon og forskjell på store og små bokstaver
Rekkefølgen for strenger avhenger av kollasjon, som styrer forskjellen på store og små bokstaver samt lokale regler. Under mange standardkollasjoner kan store bokstaver sorteres før små bokstaver, så MAX av {'apple', 'Banana'} kan gi et overraskende resultat.
I et intervju bør du nevne at MIN/MAX-resultater for strenger avhenger av kollasjonen. Denne nyansen skiller et innøvd svar fra reell forståelse.
Hva MIN(text) IKKE betyr
En vanlig misforståelse er at MIN(name) returnerer den korteste strengen, eller at MAX(name) returnerer den lengste. Det gjør de ikke. Det handler utelukkende om sorteringsrekkefølge, ikke om lengde.
Hvis du faktisk trenger den lengste strengen, sorterer du etter LENGTH(name) og velger den øverste raden, eller bruker MAX(LENGTH(name)) hvis du bare trenger lengden. Ikke forveksle verdisortering med lengde.
SELECT MAX(LENGTH(name)) AS longest_name_length
FROM employees;MIN/MAX kombinerer ikke kolonner
Viktig fallgruve: MIN og MAX opererer uavhengig på én enkelt kolonne. De returnerer ikke hele raden som inneholder minimums- eller maksimumsverdien.
Hvis du skriver SELECT MIN(salary), name uten gruppering, får du ikke navnet på den lavest lønnede — du får en feil eller et vilkårlig navn, avhengig av dialekten. For å hente hele raden bruker du ORDER BY + LIMIT eller en vindusfunksjon.
-- 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;Oppsummering av NULL-oppførsel for MIN/MAX
Akkurat som SUM og AVG hopper MIN og MAX over NULL-verdier. En NULL er verken den minste eller største verdien.
- Blandede verdier + NULL-verdier: NULL-verdier ignoreres, og det reelle minimumet/maksimumet returneres.
- Bare NULL-verdier eller ingen rader: MIN og MAX returnerer NULL.
Denne konsistensen på tvers av aggregatfunksjoner er et godt poeng å nevne: «Alle standardaggregatfunksjoner ignorerer NULL-verdier.»
Bruk i en gruppe
MIN og MAX er spesielt nyttige sammen med GROUP BY når du vil finne ytterpunkter per gruppe. «Høyeste lønn per avdeling» er et klassisk eksempel.
Dette returnerer én rad per avdeling med den høyeste lønnen i avdelingen. Husk at du får verdien, ikke den ansatte. Å koble navnet til verdien er et separat og vanlig oppfølgingsproblem.
SELECT department, MAX(salary) AS top_salary
FROM employees
GROUP BY department;Slik svarer du trygt
Et godt intervjusvar er: «MIN og MAX fungerer på alle sorterbare datatyper. For tall betyr de minst/størst, for datoer tidligst/senest, og for strenger alfabetisk rekkefølge bestemt av kolonnens kollasjon. De ignorerer NULL-verdier og returnerer NULL bare når det ikke finnes noen verdi som ikke er NULL. De returnerer én verdi, ikke hele raden, så for å hente raden ville jeg brukt ORDER BY med LIMIT eller en vindusfunksjon.»
Kort kontroll
Resonner om aggregasjon av strenger.
Oppsummering
Alt om MIN og MAX:
- Fungerer på alle sorterbare typer: tall, datoer og strenger.
- Strenger bruker alfabetisk rekkefølge bestemt av kollasjonen, ikke lengde.
- Datoer: MIN = tidligst, MAX = senest.
- De ignorerer NULL-verdier; bare NULL-verdier eller ingen rader returnerer NULL.
- De returnerer en verdi, ikke hele raden — bruk ORDER BY + LIMIT for det.
Deretter: hva skjer når du bruker aggregatfunksjoner uten GROUP BY?
Lær deg Forberedelse til kodeintervjuer med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 90
- Leksjoner
- 360
Ofte stilte spørsmål
Er leksjonen «MIN, MAX og aggregering av ikke-numeriske verdier» gratis?
Ja – hele teksten i «MIN, MAX og aggregering av ikke-numeriske verdier» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Forberedelse til kodeintervjuer-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Forberedelse til kodeintervjuer inneholder totalt 4 leksjoner.
Hva lærer jeg i «MIN, MAX og aggregering av ikke-numeriske verdier»?
Aggregering av datoer og tekst, og betydningen av MIN for tekst. Du øver på Forberedelse til kodeintervjuer med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Forberedelse til kodeintervjuer?
Ingen tidligere erfaring er nødvendig. Forberedelse til kodeintervjuer på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «MIN, MAX og aggregering av ikke-numeriske verdier»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Forberedelse til kodeintervjuer-leksjonen?
Ja. Alle Forberedelse til kodeintervjuer-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- COUNT(*) versus COUNT(column) versus COUNT(DISTINCT)
- SUM og AVG med NULL-verdier
- MIN, MAX og aggregering av ikke-numeriske verdier
- Aggregeringer uten GROUP BY