Autor | Zpráva | ||
---|---|---|---|
PetraPP Profil |
#1 · Zasláno: 9. 11. 2014, 11:04:34
Nemůžu přijit na mySQL příkaz, který by nevypisoval již vypsané hodnoty. Tedy A,A,A,B,B,B,B,C,D,D,D -> A,B,C,D...
SELECT SUBSTRING(seo,1,1) as pismeno FROM prijmeni ORDER BY pismeno |
||
juriad Profil |
#2 · Zasláno: 9. 11. 2014, 11:22:55
přidej DISTINCT
|
||
jefitto44 Profil |
#3 · Zasláno: 9. 11. 2014, 12:22:13
PetraPP:
„SELECT SUBSTRING(seo,1,1) as pismeno FROM prijmeni GROUP BY pismeno ORDER BY pismeno“ |
||
Ivan M. Profil * |
#4 · Zasláno: 10. 11. 2014, 09:14:11
No vidíte, to jsem se chtěl nedávno také podívat po tom, jaký je rozdíl mezi těmito dvěma volání:
1) SELECT DISTINCT(sloupec) AS sloupec FROM tabulka 2) SELECT sloupec FROM tabulka GROUP BY sloupec Kdyby někdo dal vědět, byl bych rád. Děkuji |
||
juriad Profil |
Ivan M.:
Pozor na to, že DISTINCT není funkce, tedy tvůj první dotaz je ekvivalentní: SELECT DISTINCT sloupec AS sloupec FROM tabulka
Rozdílů je několik, nikoli funkčních. Alespoň podle mě. GROUP BY je princip jak pracovat s agregačními funkcemi po skupinách záznamů a nikoli pro celou tabulku. Podle standardu SQL musí všechny vrácené sloupce záznamu být buď součástí GROUP BY klauzule, nebo výsledkem agregační funkce. Vedlejším efektem, v případě, že záznam se několikrát opakuje a jsou uvedeny všechny žádané sloupce, je jeho zunikátnění. DISTINCT znamená, že každý záznam má být vrácen jen jednou. Unikátnost je požadována přes všechny sloupce. Jde tedy o vysokoúrovňový požadavek, který může databáze realizovat jakkoli se jí zlíbí; GROUP BY je jednou z možností. Databáze ale třeba může poznat, že nikdy duplicitní záznamy nevzniknou a DISTINCT tedy zahodit. Čistě teoreticky by mohla databáze z použití DISTINCT odvodit lepší prováděcí plán dotazu, protože vykoukat z klauzule GROUP BY unikátnost nemusí být obecně jednoduché. Rozdíl je i ve spolehlivosti dotazu. Když přidáš do výstupu jeden další sloupec a nezměníš nic jiného, výsledky dotazů se budou většinou lišit. Odpověz si na otázku, které chování je žádané: a) vrátí víc řádků, b) vrátí náhodného reprezentanta z nově přidaného, nebo selže (závisí na DB). Co dělat v připadě, že dotaz již GROUP BY obsahuje? V takovém případě by ti nezbylo než dotaz obalit ještě jedním dotazem. U DISTINCT říkáš, co chceš, u GROUP BY říkáš více, jak to chceš. Obě možnosti dají stejný výsledek. Koho by však napadlo, že když chceš každý záznam vrátit jen jednou, musíš databázi říct, ať vytvoří skupinky a pak ať vrátí jejich reprezentanta. |
||
Časová prodleva: 11 let
|
0