sql >> Databáze >  >> RDS >> Sqlserver

Sloupec je ve výběrovém seznamu neplatný, protože není obsažen v agregační funkci ani v klauzuli GROUP BY

Jinými slovy, tato chyba vám říká, že SQL Server neví který B pro výběr ze skupiny.

Buď chcete vybrat jednu konkrétní hodnotu (např. MIN , SUM nebo AVG ), v takovém případě byste použili příslušnou agregační funkci nebo chcete každou hodnotu vybrat jako nový řádek (tj. včetně B v GROUP BY seznam polí).

Zvažte následující údaje:

ID  A   B
1   1  13
1   1  79
1   2  13
1   2  13
1   2  42

Dotaz

SELECT A, COUNT(B) AS T1 
FROM T2 
GROUP BY A

by se vrátilo:

A  T1
1  2
2  3

což je všechno dobré a dobré.

Zvažte však následující (nelegální) dotaz, který by způsobil tuto chybu:

SELECT A, COUNT(B) AS T1, B 
FROM T2 
GROUP BY A

A jeho vrácená datová sada ilustrující problém:

A  T1  B
1  2   13? 79? Both 13 and 79 as separate rows? (13+79=92)? ...?
2  3   13? 42? ...?

Následující dva dotazy to však objasňují a nezpůsobí chybu:

  1. Pomocí agregátu

    SELECT A, COUNT(B) AS T1, SUM(B) AS B
    FROM T2
    GROUP BY A
    

    by se vrátilo:

    A  T1  B
    1  2   92
    2  3   68
    
  2. Přidání sloupce do GROUP BY seznam

    SELECT A, COUNT(B) AS T1, B
    FROM T2
    GROUP BY A, B
    

    by se vrátilo:

    A  T1  B
    1  1   13
    1  1   79
    2  2   13
    2  1   42
    


  1. Jak funguje pg_sleep_until() v PostgreSQL

  2. Foreach or For – to je otázka

  3. Jak seskupit podle roku v T-SQL

  4. Streamování velkých sad výsledků pomocí MySQL