Räkna och filtrera grupper
Hitta grupper som uppfyller ett tröskelvärde – den klassiska frågan om kunder med fler än N beställningar
Räkna och filtrera grupper är en gratis lektion i Förberedelse inför kodningsintervjuer på CoddyKit. Detta är lektion 4 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.
Den vanligaste grupperingsfrågan
'Hitta kunder med fler än N order' är den klassiska GROUP BY-frågan på anställningsintervjuer. Varianter dyker ständigt upp: produkter som sålts fler än X gånger, avdelningar med minst Y anställda, dagar med fler än Z inloggningar.
Alla följer samma mönster: gruppera, räkna och filtrera sedan grupperna med HAVING.
Steg ett: räkna per grupp
Börja med att räkna raderna inom varje grupp. Gruppera efter nyckeln som definierar en 'kund' eller 'produkt', och använd sedan COUNT(*).
Det ger en rad per grupp med gruppens storlek. Ni har inte filtrerat ännu; ni mäter bara varje grupp.
SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id;Steg två: filtrera med HAVING
Behåll nu bara de grupper som uppfyller tröskelvärdet. Villkoret gäller ett aggregat, så det måste ligga i HAVING och inte i WHERE.
Tolka det som: 'gruppera order efter kund och behåll sedan kunder vars antal överstiger fem.' Detta är det fullständiga svaret på den klassiska frågan.
SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5;COUNT DISTINCT jämfört med COUNT ALL
Var uppmärksam på formuleringen. 'Kunder som har beställt fler än 3 olika produkter' kräver COUNT(DISTINCT product_id), inte COUNT(*).
COUNT(*)räknar raderna i gruppen.COUNT(DISTINCT col)räknar unika värden som inte är NULL.
Intervjuare lägger in orden 'olika' eller 'unika' i frågan för att testa om ni använder DISTINCT.
SELECT customer_id, COUNT(DISTINCT product_id) AS distinct_products
FROM orders
GROUP BY customer_id
HAVING COUNT(DISTINCT product_id) > 3;Filtrering på SUM i stället för COUNT
Samma struktur fungerar för summor. 'Kunder som totalt har spenderat mer än 1000' grupperar efter kund och filtrerar på SUM(amount).
Alla aggregat kan användas som HAVING-villkor: COUNT, SUM, AVG, MAX och MIN. Om ni identifierar frågans mått vet ni vilket aggregat ni ska filtrera på.
SELECT customer_id, SUM(amount) AS total_spent
FROM orders
GROUP BY customer_id
HAVING SUM(amount) > 1000;Flera gruppvillkor
HAVING kan kombinera villkor med AND/OR, även villkor som använder olika aggregat. 'Kunder med fler än 5 order OCH ett genomsnittligt ordervärde över 100' ryms i en enda HAVING-sats.
Varje villkor refererar till sitt eget aggregat och alla utvärderas efter grupperingen. Det visar att ni kan uttrycka sammansatta affärsregler på ett tydligt sätt.
SELECT customer_id,
COUNT(*) AS orders,
AVG(amount) AS avg_order
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5 AND AVG(amount) > 100;Kombinera WHERE och HAVING
Ofta måste rader filtreras innan de räknas. 'Bland order från i år, kunder med fler än 5 order' använder WHERE för datumet och HAVING för antalet.
WHERE minskar först antalet rader, därefter tillämpas grupperingen och HAVING-tröskeln. Att få båda satserna rätt i en enda fråga visar kunskaper på mellannivå.
SELECT customer_id, COUNT(*) AS orders_this_year
FROM orders
WHERE order_date >= '2024-01-01'
GROUP BY customer_id
HAVING COUNT(*) > 5;Hitta dubbletter
En närbesläktad variant är: 'hitta dubbletter av e-postadresser.' Gruppera efter kolumnen som ska vara unik och behåll grupper med ett antal större än ett.
Detta enda mönster upptäcker duplicerade nycklar, upprepade transaktioner eller alla värden som förekommer fler gånger än de borde. Intervjuare ställer frågan för att testa om ni ser gruppering som ett verktyg för deduplicering.
SELECT email, COUNT(*) AS times_seen
FROM users
GROUP BY email
HAVING COUNT(*) > 1;Grupper med exakt ett visst antal
Trösklar handlar inte alltid om ”större än”. ”Kunder med exakt en beställning” använder HAVING COUNT(*) = 1; ”minst 3” använder >= 3.
Lägg märke till gränsordet i frågan: ”fler än”, ”minst”, ”exakt”, ”färre än”. Var och en motsvarar en annan jämförelseoperator, och intervjuare testar att du är noggrann med detta.
-- One-time customers
SELECT customer_id, COUNT(*) AS orders
FROM orders
GROUP BY customer_id
HAVING COUNT(*) = 1;Returnera endast nycklarna
Ibland efterfrågar frågan bara de identifierare som uppfyller villkoret, inte antalen, ofta för att användas i en annan fråga. Du grupperar och filtrerar fortfarande, men väljer bara nyckeln i SELECT.
Du kan sedan kapsla in detta i en IN-underfråga eller en JOIN för att hämta fullständiga poster för dessa kunder. Att behärska denna typ av sammansättning är ett tecken på senior kompetens.
SELECT customer_id
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5;Intervjuguide
För alla frågor om ”grupper som uppfyller en tröskel” kan du gå igenom fyra steg högt: (1) identifiera grupperingsnyckeln, (2) välj aggregatmåttet, (3) avgör jämförelseoperatorn utifrån formuleringen, (4) placera radfilter i WHERE och aggregatfiltret i HAVING.
Den här mallen löser hela kategorin av problem där du räknar och filtrerar.
Snabbkontroll
Välj rätt fråga för uppgiften.
Sammanfattning
Mönster: gruppera efter nyckeln, aggregera och filtrera grupper med HAVING. Detta löser ”fler än N beställningar”, kunder som spenderar mest, dubbletter och engångskunder.
- Använd
COUNT(*)för rader ochCOUNT(DISTINCT col)för unika värden. - Anpassa jämförelseoperatorn efter formuleringen i frågan.
- Radfilter placeras i WHERE och aggregatfilter i HAVING.
- Välj bara nyckeln för att mata en IN-underfråga eller en JOIN.
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 ”Räkna och filtrera grupper” gratis?
Ja – hela texten till ”Räkna och filtrera grupper” 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 ”Räkna och filtrera grupper”?
Hitta grupper som uppfyller ett tröskelvärde – den klassiska frågan om kunder med fler än N beställningar 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 4 av 4.
Hur lång tid tar lektionen ”Räkna och filtrera grupper”?
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
- GROUP BY-regeln för kolumner i SELECT
- HAVING kontra WHERE
- Gruppera efter flera kolumner och uttryck
- Räkna och filtrera grupper