PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

group by necessário na instrução SQL count(*)?


Este erro faz todo o sentido. COUNT é uma função "agregada". Então você precisa dizer qual campo agregar, o que é feito com o GROUP BY cláusula.

O que provavelmente faz mais sentido no seu caso seria:
SELECT column_a, COUNT(*) FROM my_schema.my_table GROUP BY column_a;

Se você somente use o COUNT(*) cláusula, você está pedindo para retornar o número completo de linhas, em vez de agregar por outra condição. Sua pergunta se GROUP BY está implícito nesse caso, pode ser respondido com:"mais ou menos":Se você não especificar nada é como perguntar:"agrupar por nada", o que significa que você obterá um agregado enorme, que é a tabela inteira.

Como exemplo, executando:
SELECT COUNT(*) FROM table;

mostrará o número de linhas nessa tabela, enquanto:
SELECT col_a, COUNT(*) FROM table GROUP BY col_a;

mostrará o número de linhas por valor de col_a . Algo como:
    col_a  | COUNT(*)
  ---------+----------------
    value1 | 100
    value2 | 10
    value3 | 123

Você também deve levar em conta que o * significa contar tudo . Incluindo NULL s! Se você quiser contar uma condição específica, você deve usar COUNT(expression) ! Consulte os documentos sobre funções agregadas para mais detalhes sobre este tópico.