Kolumny dodane w klauzuli SELECT bez funkcji agregującej powinny znajdować się w klauzuli GROUP BY.
Aby było trochę jasne:
Weź ten przykład:
Masz TransactionID, AccountID, TransactionAmount, TransactionDate w klauzuli SELECT i potrzebujesz SUM(TransactionAmount) we wszystkich datach, w takim przypadku, jeśli dodasz
SELECT TransactionDate, TransactionID, AccountID, SUM(TransactionAmount)
FROM Table
GROUP BY TransactionDate
Następnie pojawi się błąd, dlaczego, ponieważ
Załóżmy, że masz 4 transakcje w 20160101, a każda kwota transakcji wynosi 1000 USD
Twoje oczekiwany wynik będzie
TransDate TransAmt
20140101 4000
W takim przypadku, jeśli wprowadzisz inne atrybuty w klauzuli SELECT, takie jak AccountID i TransactionID, dokąd one trafią? Dlatego musimy uwzględnić wszystkie atrybuty w klauzuli GROUP, cokolwiek w klauzuli SELECT, z wyjątkiem tego, który jest z funkcją AGGREGATE.