Tag Archive for group by

GROUP BY og WITH ROLLUP function

GROUP BY er en funktion som bruges til at gruper en række rows som det formenligt også ligger i navnet GROUP BY, men man kan også lave nogle trisk som spare SQL serveren og dig selv for tid, det kan være hvis du eks. Har en række tal du gerne vil ha lagt sammen i en indkøbs kurve så kan GROUP BY benyttes på denne måde.

SELECT sum( shopAntal ) AS TotalAntal, sum( shopPris * shopAntal ) AS TotalPris FROM shop_barsket WHERE userId = ‘brugerid’ GROUP BY userId;

denne SQL ligge alle vare antal og alle priseren sammen til et enklet row udtræk så du ikke skal til at køre en while løkke for at tælle det hele sammen endnu en gang og der efter beregne din data.

Når man kommer til at tælle tal sammen og faktisk ikke gider at lave 2 SQL udtræk kan man gøre det hele meget simplet, for at slippe for 2 SQL udtræk kan man lave et WITH ROLLUP satament som tæller alle ens int værdier sammen og til sidst laver et ekster row udtræk hvor den har indeholder NULL i de steder som ikke er INT værdier eller er regnet sammen.

SELECT SUM( shopAntal ) AS TotalAntal, sum( shopPris * shopAntal ) AS TotalPris FROM shop_barsket WHERE userId = ‘brugerid’ GROUP BY produktId, userId WITH ROLLUP;

Brugen af DISTINCT til at fjerne doblet row

For at fjerne en række der gentager sig når du nu trækker et udtræk ud så alle dine udtræk er unikke kan du gøre det ved at bruge DISTINCT efter SELECT og før du printer outputtet til browseren.

SELECT DISTINCT last_name FROM t;

Der er forskel på hvordan den fjerne disse gentaglser alt efter om du bruger binær eller ikke binær felter, hvis du bruger binær er ”ABC, Abc og abc” forskellige til hvis du bruger ikke binær felter.

Ved brugen af DISTINCT kan du benytte multi select til at ude lukke en støre sansynlighed for en dublikering.

SELECT DISTINCT last_name, first_name FROM t;

DISTINCT er god til små mængte data men skal man op og benytte nogle forskellige ting som at udelukke 2 e-mail adresser men stadig have brugers navn og adresse med ud kan DSTINCT ikke benyttes, til dette formål ville det være en bædre løsning hvis der bliver benyttet GROUP BY statment.

SELECT navn, adresse, email FROM table GROUP BY email;

På denne måde samler man alle emails samme i en gruppe hvor efter man kan trække adresse og navn med ud som en multi select.

Den største forskel mellem DISTINCT og GROUP BY er at DISTINCT ikke kan sorters men det kan GROUP BY godt, der i mod kan DISTINCT tælle sammen hvor mange lighedere der er mellem sin egen række som eks. Sådan her.

SELECT COUNT( DISTINCT j ) FROM t;

Navngive colum i en select

Som standart er en colum ( række ) det samme navn som der står i database men dette kan ændres ved at benytte AS statement.

SELECT felt AS feltnavn FROM t;

du kan bruge det nye navn til at referer i GROUP BY, HAVING eller ORDER BY statement.