GRUPPERA EFTER OCH HA
För att få djupare insikter och bättre organisera data i en databas introducerar SQL de kraftfulla GROUP BY satserna och HAVING satserna.
Med de här verktygen kan du omvandla rådata till meningsfulla sammanfattningar genom att kategorisera rader och tillämpa aggregeringsfunktioner, göra det enklare att analysera trender, identifiera mönster eller generera rapporter som är skräddarsydda för specifika kategorier.
GRUPPERA EFTER
SQL-satsen GROUP BY för att analysera data efter kategori eller grupp. Den här satsen kategoriserar rader baserat på värdena i angivna kolumner och partitionerar effektivt data i underuppsättningar.
Den verkliga kraften i GROUP BY avslöjas när den används med aggregatfunktioner. Aggregeringsfunktioner, till exempel COUNT(), SUM(), AVG(), MIN() och MAX(), utför beräkningar på dessa grupper, så att du kan generera sammanfattningsstatistik för varje kategori.
Du kan till exempel använda GROUP BY för att beräkna: -total försäljning SUM() för varje produktkategori, -average pris AVG() för produkter från varje leverantör -number kunder COUNT() i varje stad.
SELECT category_id, AVG(price)
FROM sales.products
GROUP BY category_id;
Den här frågan hämtar det genomsnittliga priset för produkter inom varje kategori genom att gruppera raderna i sales.products tabellen enligt deras category_id. Genom att tillämpa AVG() funktionen på price kolumnen beräknar frågan medelvärdet av priserna för alla produkter under varje distinkt .category_id
GROUP BY -satsen behöver inte alltid paras ihop med aggregerade funktioner. Den används ofta tillsammans med aggregerade funktioner för att utföra beräkningar på grupperade data, GROUP BY men kan också användas av sig själv för att organisera data i grupper för andra ändamål, till exempel för att hämta distinkta kombinationer av kolumner.
SELECT category_id
FROM sales.products
GROUP BY category_id;
Den här frågan grupperar raderna efter category_id utan att utföra någon aggregering och listar helt enkelt varje distinkt category_id som finns i sales.products-tabellen.
ATT HA
I SQL WHERE kan satsen inte användas för att filtrera resultatet av aggregerade funktioner.
För att filtrera grupper som skapats av GROUP BY -satsen baserat på resultaten av aggregerade funktioner, använder du HAVING -satsen.
Tänk på HAVING som en klausul WHERE för grupper: det gör att du kan tillämpa villkor på de sammanfattade data som produceras av aggregerade funktioner, vilket gör att du kan förfina din analys för att fokusera på relevanta grupper.
SELECT category_id, AVG(price)
FROM sales.products
GROUP BY category_id
HAVING AVG(price) > 30;
Den här frågan beräknar medelvärdet price av produkter inom varje kategori genom att gruppera rader i sales.products tabellen enligt deras category_id. Sedan filtreras resultaten så att de endast innehåller de kategorier där genomsnittet price överskrider 30 med hjälp av HAVING -satsen.