Sdílet prostřednictvím


Práce se sloupci v agregovaných dotazech (Visual Database Tools)

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 BY klauzule automaticky přidají. Sloupce se do GROUP BY klauzule automaticky nepřidají, pokud už jsou součástí agregační funkce.

    Pokud nechcete, aby byl konkrétní sloupec součástí GROUP BY klauzule, 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 BY klauzule 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í WHERE podmí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 HAVING podmí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 klauzuli HAVING, v závislosti na tom, jak se používají jinde v dotazu.

  • WHERE Klauzule 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 v WHERE klauzuli použít, i když není součástí GROUP BY klauzule 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 BY klauzuli nebo agregační funkci, může se vyhledávací podmínka objevit jako WHERE klauzule nebo HAVING klauzule – 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í HAVING klauzule.