Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Při vytváření agregačních dotazů nástroje návrháře dotazů a zobrazení (Visual Database Tools) provádí určité předpoklady, aby mohl vytvořit platný dotaz. Pokud například vytváříte agregační dotaz a označíte datový sloupec pro výstup, Návrhář dotazu a zobrazení automaticky vytvoří sloupec součástí klauzule GROUP BY, abyste se neúmyslně nesnažili zobrazovat obsahy jednotlivých řádků v souhrnu.
Použít seskupení podle
Návrhář dotazů a zobrazení používá následující pokyny pro práci se sloupci:
Když zvolíte možnost Seskupit podle nebo do dotazu přidáte agregační funkci, všechny sloupce označené jako výstup nebo použité k řazení se do
GROUP BYklauzule automaticky přidají. Sloupce se doGROUP BYklauzule automaticky nepřidají, pokud už jsou součástí agregační funkce.Pokud nechcete, aby byl konkrétní sloupec součástí
GROUP BYklauzule, musíte ho ručně změnit výběrem jiné možnosti ve sloupci Seskupit podle v podokně Kritéria. Návrhář dotazů a zobrazení vám ale nebrání v výběru možnosti, která může vést k dotazu, který se nespustí.Pokud ručně přidáte výstupní sloupec dotazu do agregační funkce v podokně Kritéria nebo SQL, nástroj Query and View Designer automaticky neodebere další výstupní sloupce z dotazu. Proto je nutné odebrat zbývající sloupce z výstupu dotazu nebo je provést jako součást
GROUP BYklauzule nebo agregační funkce.
Když do sloupce Filtr v podokně Kritéria zadáte podmínku hledání, návrhář dotazu a zobrazení se řídí těmito pravidly:
Pokud se sloupec Seskupovat podle mřížky se nezobrazuje (protože jste ještě nezadali agregační dotaz), do klauzule se umístí
WHEREpodmínka hledání.Pokud už jste v agregačním dotazu a vybrali možnost Where ve sloupci Group By, je vyhledávací podmínka umístěna do klauzule
WHERE.Pokud sloupec Group By obsahuje jinou hodnotu než Where, je v klauzuli umístěna
HAVINGpodmínka hledání.
Použití klauzulí HAVING a WHERE
Následující principy popisují, jak můžete odkazovat na sloupce v agregačním dotazu v podmínkách hledání. Obecně platí, že sloupec v podmínce hledání můžete použít k filtrování řádků, které by se měly shrnout ( WHERE klauzule), nebo určit, které seskupené výsledky se zobrazí v konečném výstupu ( HAVING klauzule).
Jednotlivé datové sloupce se můžou zobrazit buď v klauzuli
WHERE, nebo v klauzuliHAVING, v závislosti na tom, jak se používají jinde v dotazu.WHEREKlauzule slouží k výběru podmnožinu řádků pro sumarizaci a seskupování, a proto jsou použity před provedením seskupení. Proto můžete datový sloupec vWHEREklauzuli použít, i když není součástíGROUP BYklauzule nebo obsažený v agregační funkci. Například následující příkaz vybere všechny tituly, které stojí více než 10,00 Usd, a zprůměruje cenu:SELECT AVG(price) FROM titles WHERE price > 10;Pokud vytvoříte vyhledávací podmínku, která zahrnuje sloupec také použitý v
GROUP BYklauzuli nebo agregační funkci, může se vyhledávací podmínka objevit jakoWHEREklauzule neboHAVINGklauzule – vy sami se můžete rozhodnout, jakou podobu bude mít tato podmínka. Například následující příkaz vytvoří průměrnou cenu pro názvy jednotlivých vydavatelů a pak zobrazí průměr pro vydavatele, ve kterém je průměrná cena větší než 10,00 Kč:SELECT pub_id, AVG(price) FROM titles GROUP BY pub_id HAVING (AVG(price) > 10);Pokud v podmínce hledání použijete agregační funkci, podmínka zahrnuje souhrn a proto musí být součástí
HAVINGklauzule.