Förberedelse inför kodningsintervjuer · Lektion

MIN, MAX och aggregering av icke-numeriska värden

Aggregera datum och strängar och förstå betydelsen av MIN för text

Lektion 3 av 413 steg

MIN, MAX och aggregering av icke-numeriska värden är en gratis lektion i Förberedelse inför kodningsintervjuer på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Förberedelse inför kodningsintervjuer, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Förberedelse inför kodningsintervjuer innehåller totalt 4 lektioner.

MIN och MAX även för annat än tal

Vissa kandidater antar att MIN och MAX bara fungerar med tal. Intervjuare älskar att fråga: "Vad returnerar MAX(name)? Hur är det med MIN(order_date)?"

Sanningen är att MIN och MAX fungerar med alla typer som kan sorteras — tal, datum och strängar. Att förstå ordningsreglerna för varje typ är den verkliga färdighet som testas här.

Fallet med tal

Börja med det välbekanta. För numeriska kolumner returnerar MIN det minsta värdet och MAX det största. Enkelt.

Precis som övriga aggregat ignorerar MIN och MAX NULL-värden. Ett NULL-värde är aldrig det minsta eller största; det hoppas helt enkelt över. Om alla värden är NULL returnerar båda NULL.

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

MIN och MAX för datum

Datum och tidsstämplar kan alltid ordnas, så MIN(order_date) ger det tidigaste datumet och MAX(order_date) det senaste.

På så sätt besvarar man frågorna "när lades den första ordern?" (MIN) och "vilken är den senaste aktiviteten?" (MAX) utan att sortera och begränsa resultatet. Det är den idiomatiska, mängdbaserade lösningen.

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

Datumintervall i en enda fråga

En vanlig följdfråga är: "Hur länge har den här kunden varit aktiv?" Kombinera MIN och MAX och subtrahera sedan det ena från det andra.

Detta beräknar intervallet mellan den första och den sista ordern. Den exakta syntaxen för subtraktionen varierar mellan olika dialekter, men MIN/MAX-idén är universell och visar att man kan uttrycka intervall 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 och MAX för strängar

Här kommer den del som överraskar många. För textkolumner använder MIN och MAX lexikografisk ordning (alfabetisk ordning) baserat på kolumnens sorteringsordning.

Det innebär att MIN(name) returnerar namnet som kommer först i alfabetisk ordning och MAX(name) det som kommer sist. MIN över {'Carol', 'Alice', 'Bob'} returnerar 'Alice'; MAX returnerar 'Carol'.

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

Sorteringsordning och skiftlägeskänslighet

Strängordningen beror på sorteringsordningen, som styr skiftlägeskänslighet och lokala regler. Med många standardsorteringsordningar kan versaler sorteras före gemener, så MAX för {'apple', 'Banana'} kan ge ett överraskande resultat.

Vid en intervju bör du nämna att resultaten från MIN/MAX för strängar beror på sorteringsordningen. Den nyansen skiljer ett memorerat svar från verklig förståelse.

Vad MIN(text) INTE betyder

En vanlig missuppfattning är att MIN(name) returnerar den kortaste strängen eller att MAX(name) returnerar den längsta. Så är det inte. Det handlar enbart om sorteringsordning, inte om längd.

Om du faktiskt behöver den längsta strängen sorterar du efter LENGTH(name) och väljer den första raden, eller använder MAX(LENGTH(name)) om du bara behöver längden. Blanda inte ihop värdeordning med längd.

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

MIN/MAX kombinerar inte kolumner

Viktigt att se upp med: MIN och MAX arbetar oberoende på en enda kolumn. De returnerar inte hela raden som innehåller minimi- eller maximivärdet.

Om du skriver SELECT MIN(salary), name utan gruppering får du inte namnet på den med lägst lön — du får ett fel eller ett godtyckligt namn beroende på dialekt. Om du vill hämta hela raden använder du ORDER BY + LIMIT eller en fönsterfunktion.

-- 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;

Sammanfattning av NULL-beteendet för MIN/MAX

Precis som SUM och AVG hoppar MIN och MAX över NULL. Ett NULL-värde är varken det minsta eller det största värdet.

  • Blandade värden + NULL: NULL ignoreras och det verkliga minimi-/maximivärdet returneras.
  • Enbart NULL eller inga rader: MIN och MAX returnerar NULL.

Denna konsekvens mellan aggregatfunktioner är en bra sak att påpeka: "Alla standardaggregat ignorerar NULL."

Användning i en grupp

MIN och MAX kommer verkligen till sin rätt med GROUP BY när man vill hitta extremvärden per grupp. "Högsta lönen per avdelning" är ett klassiskt exempel.

Detta returnerar en rad per avdelning med den avdelningens högsta lön. Kom ihåg att funktionen ger värdet, inte den anställda. Att koppla namnet till värdet är ett separat och vanligt följdproblem.

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

Så svarar du självsäkert

Ett starkt intervjusvar är: "MIN och MAX fungerar på alla typer som kan ordnas. För tal betyder de minst/störst, för datum tidigast/senast och för strängar alfabetisk ordning enligt kolumnens sorteringsordning. De ignorerar NULL och returnerar endast NULL när inget icke-NULL-värde finns. De returnerar ett enda värde, inte hela raden, så för att hämta raden skulle jag använda ORDER BY med LIMIT eller en fönsterfunktion."

Snabbtest

Resonera kring strängaggregering.

Sammanfattning

Allt om MIN och MAX:

  • Fungerar på alla ordningsbara typer: tal, datum och strängar.
  • Strängar använder alfabetisk ordning/sorteringsordning, inte längd.
  • Datum: MIN = tidigast, MAX = senast.
  • De ignorerar NULL; om alla värden är NULL eller om inga rader finns returneras NULL.
  • De returnerar ett värde, inte hela raden — använd ORDER BY + LIMIT för det.

Nästa: vad som händer när du använder aggregat utan GROUP BY.

Gratis att börja

Lär dig Förberedelse inför kodningsintervjuer med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
90
Lektioner
360

Vanliga frågor

Är lektionen ”MIN, MAX och aggregering av icke-numeriska värden” gratis?

Ja – hela texten till ”MIN, MAX och aggregering av icke-numeriska värden” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Förberedelse inför kodningsintervjuer, kan Ni uppgradera till CoddyKit PRO. Kursen i Förberedelse inför kodningsintervjuer innehåller totalt 4 lektioner.

Vad lär jag mig i ”MIN, MAX och aggregering av icke-numeriska värden”?

Aggregera datum och strängar och förstå betydelsen av MIN för text Ni övar på Förberedelse inför kodningsintervjuer med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Förberedelse inför kodningsintervjuer?

Du behöver inga förkunskaper. Utbildningen i Förberedelse inför kodningsintervjuer på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”MIN, MAX och aggregering av icke-numeriska värden”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Förberedelse inför kodningsintervjuer-lektionen?

Ja. Varje Förberedelse inför kodningsintervjuer-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. COUNT(*) kontra COUNT(column) kontra COUNT(DISTINCT)
  2. SUM och AVG med NULL
  3. MIN, MAX och aggregering av icke-numeriska värden
  4. Aggregeringar utan GROUP BY
← Tillbaka till Förberedelse inför kodningsintervjuer