Databáze > Firebird a Interbase

DISTINCT či GROUP BY

<< < (2/3) > >>

Stanislav Hruška:
Nedalo mi to a hľadal som na internete. Našiel som na
https://stackoverflow.com/questions/19171901/how-to-use-group-by-in-firebird
Ďalším syntakticky platným použitím je získanie zoznamu odlišných hodnôt

--- Kód: ---SELECT TEST_DESC, MEASUREMENT, LL, UL FROM T_TABLE2 GROUP BY TEST_DESC, MEASUREMENT, LL, UL
--- Konec kódu ---
čo je ekvivalentné

--- Kód: ---SELECT DISTINCT TEST_DESC, MEASUREMENT, LL, UL FROM T_TABLE2
--- Konec kódu ---
Podľa toho to je v poriadku. Viac tam k tomu nebolo.

vandrovnik:
Taky si myslím, že použít GROUP BY pro tyhle účely není nijak zakázáno. Co jsem viděl zmínky, tak např. starší verze MS SQL ten DISTINCT prý zpracovaly rychleji než GROUP BY, ale novější verze to pak už měly nastejno. A pro MySQL jsem někde četl, že GROUP BY výsledky vracelo seřazené, zatímco DISTINCT ne.

Stanislav Hruška:

https://sonra.io/flowhigh/sql-antipatterns-select-distinct/
Toto je celkom zaujímavé. Aj s vysvetlením
--- Citace ---SQL DISTINCT verzus SQL GROUP BY
Dotaz SELECT DISTINCT môžeme prepísať ako GROUP BY.
.
Namiesto
.
SELECT DISTINCT ss_customer_sk from "SAMPLE_DATA"."TPCDS_SF10TCL"."STORE_SALES";
Môžeme si písať
.
SELECT ss_customer_sk from "SAMPLE_DATA"."TPCDS_SF10TCL"."STORE_SALES" GROUP BY ss_customer_sk;
Tieto dva dotazy generujú presne rovnaký plán vysvetlenia a ich vykonanie trvá rovnako dlho.
.
Odporúčam použiť verziu DISTINCT, pretože zámer dotazu je jasnejší a zrejmejší. GROUP BY hovorí používateľovi, aby očakával agregáciu. DISTINCT hovorí používateľovi, aby očakával jedinečný zoznam hodnôt.
--- Konce citace ---

pf1957:

--- Citace: Stanislav Hruška  26-07-2023, 10:44:52 ---Odporúčam použiť verziu DISTINCT, pretože zámer dotazu je jasnejší a zrejmejší. GROUP BY hovorí používateľovi, aby očakával agregáciu. DISTINCT hovorí používateľovi, aby očakával jedinečný zoznam hodnôt.

--- Konce citace ---
Ano.

Me by nikdy nenapadlo pouzit GROUP BY bez agregacni funkce, i kdyz je jasne, ze RDBMS musi nejprve vnitrne vytvorit unikatni seznam zaznamu, ktere ma agregovat. Jestli to vsechny RDBMS, se kterymi jsem kdy pracoval, umoznuji, si nepamatuju. Nicmene bych to nikdy nepouzil.

pf1957:

--- Citace: vandrovnik  26-07-2023, 10:37:59 ---A pro MySQL jsem někde četl, že GROUP BY výsledky vracelo seřazené, zatímco DISTINCT ne.

--- Konce citace ---
Jenomze MySQL je (nebo aspon byla) parodie na DB :-D Jestli si to pamatuju, tak zrovna u toho GROUP BY umoznuje konstrukci, ze tam nemas vypsana vsechna neagregovana pole...

Navigace

[0] Seznam témat

[#] Další strana

[*] Předchozí strana

Přejít na plnou verzi