Kezdőoldal » Számítástechnika » Programozás » MySQL-ben pontosan mi a...

MySQL-ben pontosan mi a különbség a két megoldás között?

Figyelt kérdés

Találtam ezt az oldalt

[link]


Azon túl, hogy a az eredmény halmazt egy sorban adja vissza a group_concat, míg a group by külön sorokba, van-e lényeges különbség a két megoldás között:


SELECT

GROUP_CONCAT(country)

FROM

customers;


SELECT

country

FROM

customers group by(customerNumber);


Ezen túl van haszna a group_concat-nak



2018. febr. 28. 07:53
 1/3 anonim ***** válasza:

Kijelölés, jobb gomb, Google. Ezt a munkát most elvégeztem helyetted, pl.: [link]


Amit a neve is mutatja, a group_concat() konkatenál. A group by nem. Azt csak akkor tudod használni, ha egy aggregált eredmény van a select után írva. Ezenkívül nyilván egész más a két példa, amit írtál, hiszen az egyikben country, a másikban customerNumber szerint csoportosítasz.

2018. febr. 28. 12:57
Hasznos számodra ez a válasz?
 2/3 anonim ***** válasza:

Az elsőben nem csoportosít semmi szerint.


A group_concat egy agregátor függvény, mint a min, max, avg, stb. Azaz csoportokból képez egy értéket. Egész pontosan az argumentumában lévő kifejezést alkalamzza a csoport minden rekordjára és ezeket konkatenálja össze (alapértelmezetten egy vesszővel elválasztva).


Dokumentáció:

[link]


(Ha nem csoportosítasz, mint az első példában, akkor az egész eredmény halmaz egy csoportként működik.)


Elméletben csoportosítás esetén csak a csoportosító mezőket és az agregátor függvényeket szabad használni. Ezt megsérti a második példád. De a MySQL van olyan rugalmas, hogy nem küld el a francba miatta. Cserébe viszont (ha jól tudom) nem definiált, hogy mi lesz az eredménye.

Értsd, hogy mit jelent a 2. példád: csoportosítsd a rekordokat customerNumber szerint és csoportonként adj EGY country értéket (MELYIKET?!)


A két példa így lenne HASONLÓ:

SELECT

GROUP_CONCAT(country)

FROM

customers;


SELECT

country

FROM

customers;


Ekkor az első összefűzné az X darab country-t vesszővel elválasztva 1 darab szöveggé (azaz 1 darab rekord az eredmény).

A második pedig vissza adná az X darab country-t (azaz X darab rekord az eredmény).


Vagy így lenne hasonló a két példa:

SELECT

GROUP_CONCAT(country)

FROM

customers

GROUP BY

customerNumber;


SELECT

country

FROM

customers

GROUP BY

customerNumber;


Ekkor az első összefűzné Y darab csoport X1, X2, ... darab county-ját 1-1 szöveggé (azaz Y darab rekord lenne az eredmény).

A második pedig az Y darab csoportból kivenne EGY-EGY country-t (MELYIKET?! ugye) - itt is Y darab rekord az eredmény, de csak 1-1 country!

2018. febr. 28. 16:22
Hasznos számodra ez a válasz?
 3/3 anonim ***** válasza:

Ja, és a "haszna":

Attól függ, mi a feladat.

Tegyük fel, hogy vannak országnevek és kontinens nevek.


SELECT

kontinens, GROUP_CONCAT(orszag)

FROM

orszagok

GROUP BY

kontinens;


Ez kontinensenként összefűzné az országok neveit, és valami ilyesmi lenne az eredmény:

Európa|Magyarország,Ausztria,Németország,...

Ázsia|Kína,Japán,Oroszország,...

Afrika|Egyiptom,Algéria,...

...


Megjegyzés: a dokumentációban benne van, hogyan lehet megadni az elválasztó értékét. Tehát nem muszáj a vesszővel használni.

2018. febr. 28. 16:26
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!