Tag Archive for distinct

GROUP_CONCAT() Function

MyQL har en meget smart funktion til de der ønsker at smide et udtræk ud på en linje så de spare selve at skille disse ting op med eks. Komma, vil lave et udtræk som trækker alle de lande der tilhøre Thailand ud og liste dem derefter på 1 linje isted for X antal row.

SELECT GROUP_CONCAT( Language ) AS Language FROM CountryLanguage WHERE CountryCode = ’THA’;
return: Languages = Chinese, Khmer, Kuy, Lao, Malay, Thai

Skulle slutbruger nu ikke være tilfræs med at det kommer med komma skilte ord kan du sel lave det om til at komme med det tegn du har løst til eks.

GROUP_CONCAT( Language SEPARATOR ’ – ’  )

Som så adslikker hvert ord med – isted for , Hvis du er i mod gerne vil sortere den måde dette udtræk bliver listet ud på kan du gøre det inde i din GROUP_CONCAT() funktion så leds.

GROUP_CONCAT( Language ORDER BY Language DESC )

Hvor den efter fulgt lister det ud i den nye række følge, skulle man være uheldig og side med de samme navne i en database hvor man gerne vil have de samme navne sortert fra kan man bruger her DISTINCT inde i GROUP_CONCAT() også .

GROUP_CONCAT( DISTINCT Lnguage )

Så vil den automatisk sortere alle der er 2 af fra så de kun bliver vist en enkle gang, GROUP_CONCAT() hopper automatisk over NULL værdier.

COUNT() Function

COUNT() bruges til at tælle et X antal rækker sammen som er tilgænlige at liste ud eks.

SELECT COUNT(*) FROM t;
return:  COUNT(*) = 7

Her retuerer den talet 7 fordi der er fundet 7 rækker som er klar til at blive listet ud, man kan også benytte COUNT() på en bestemt felt navn eks.

SELECT COUNT( i ), COUNT( j ) FROM t;
return: COUNT( i ) = 5, COUNT( j ) = 4

Her vil den retuere 5 og 4 fordi den kun tæller de ting sammen hvor der ikke findes et NULL også kaldt for ( non-null value ), hvis man ønsker kun at få talt de ting sammen som er 100% unik i en række kan man her bruge DISTINCT functionen eks.

SELECT COUNT( DISTINCT i ), COUNT( DISTINCT j ) FROM t;
return:  COUNT( DISTINCT i )  =  1, COUNT( DISTINCT j ) = 3

Det er også muligt at kombinere felter med DISTINCT inde i en COUNT() så leds at man får et mere spefikt udtrækt eks.

SELECT COUNT( DISTINCT i, j ) FROM t;
return: COUNT( DISTINCT i, j ) = 2

Den trækker alle felter ud som ikke er ens og ikke indeholder NULL værdien.

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;