Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

159
Vistas
La columna agregada de CTE no se puede usar en la cláusula WHERE en la consulta en PostgreSQL

Mi consulta sigue esta estructura:

 WITH CTE AS ( SELECT t1.x, COUNT(t1.y) AS count FROM table1 t1 GROUP BY t1.x ) SELECT CTE.x, CTE.count AS newCount, t2.count AS oldCount FROM table2 t2 JOIN CTE ON t2.x = CTE.x WHERE t2.count != CTE.count;

Me sale el siguiente error: [42803] ERROR: aggregate functions are not allowed in WHERE

Parece que CTE.count es el agregado que desencadena este error. ¿No se supone que los CTE se calculan antes de la consulta principal? ¿Cómo reescribir la consulta para evitar esto?

PostgreSQL 13.2 en x86_64-pc-linux-gnu, compilado por gcc (GCC) 8.3.1 20191121 (Red Hat 8.3.1-5), 64 bits

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Parece que es el "t2.count" lo que causa el problema.

En dbfiddle puedo reproducir el problema SOLAMENTE cuando no hay una columna llamada "recuento" en la tabla 2.

En otras palabras, el error ocurre solo cuando la tabla 2 se define así:

 create table table2 (x int, y int);

Sin embargo, si agregué la columna "recuento", el error desapareció

 create table table2 (x int, y int, count int);

Creo que cuando no existe tal columna, postgres maneja "contar" como una función agregada y arroja el error.

Entonces, mi solución sería verificar si dicha columna está presente y nunca usar palabras clave conservadas como nombres de columna

over 4 years ago · Santiago Trujillo Denunciar

0

El t2.count se interpreta como una función COUNT() agregada , y su tabla t2 no tiene una columna llamada count .

Asegúrese de que su tabla realmente tenga una columna de count , o asegúrese de calcular su conteo agregado en otro CTE antes de unirse, y luego compare los resultados. También evite usar el alias "count", como el siguiente:

 WITH CTE AS ( SELECT t1.x, COUNT(t1.y) AS total FROM table1 t1 GROUP BY t1.x ), CTE2 AS ( SELECT t2.x, COUNT(t2.y) AS total FROM table2 t2 GROUP BY t2.x ) SELECT CTE1.x, CTE1.total AS newCount, CTE2.total AS oldCount FROM CTE2 JOIN CTE1 ON CTE2.x = CTE1.x WHERE CTE2.total != CTE1.total;
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda