AnswerBun.com

Error al tratar de comparar dos count en sqlite

Stack Overflow en español Asked by Andres on December 11, 2020

Buen día! Estoy teniendo un problema cuando intento comparar los resultados de dos count distintos, supongamos que tengo una tabla definida de la siguiente forma:

CREATE TABLE piezas(
  id1 INTEGER PRIMARY KEY AUTOINCREMENT,
  id2 INTEGER,
  ruta INTEGER,
  leido INTEGER);

En la cuál quiero realizar la siguiente consulta:

SELECT p.id2, COUNT(p.id2) AS cantidad, (SELECT COUNT(p1.id2) 
  FROM piezas AS p1 WHERE p1.id2 = p.id2) AS total 
FROM piezas AS p 
WHERE p.ruta < 0 OR (p.leido > 0 AND cantidad = total) 
GROUP BY p.id2;

Esta consulta me arroja el error:

"Uncaught Error: misuse of aggregate: COUNT()"

Cómo podría obtener todos los id2 siempre y cuándo su "ruta" sea menor a 0 o que el campo "leido" se mayor a 0 mientras que todos los leídos sean igual a la cantidad total (siendo la cantidad total el recuento de todos los id1 que tengan el mismo id2)

2 Answers

En mi experiencia es recomendable no usar subconsultas, pues baja mucho el rendimiento debido a que se ejecuta por cada elemento de la consulta que la contiene.

Lo más recomendable es tratar de moverla de nivel para usar un JOIN.

Pienso que la consulta final debería quedar así.

SELECT q1.id2, q1.cantidad, q2.total
FROM (
   SELECT p.id2, COUNT(p.id2) AS cantidad
   FROM piezas AS p
   WHERE p.ruta < 0 OR (p.leido > 0) 
   GROUP BY p.id2) q1
INNER JOIN (
   SELECT p2.id2, COUNT(p2.id2) total
   FROM piezas AS p2 
   GROUP BY p2.id2) q2 ON q1.id2 = q2.id2 AND q1.cantidad = q2.total;

Espero que esté bien la consulta final, no tengo manera de probarla en este momento.

Answered by EdgardoO on December 11, 2020

La consulta tiene que tener la condición de igualdad no debería estar en el WHERE sino en el HAVING, quedando la consulta:

SELECT p.id2, COUNT(p.id2) AS cantidad, (SELECT COUNT(p1.id2) 
  FROM piezas AS p1 WHERE p1.id2 = p.id2) AS total 
FROM piezas AS p 
WHERE p.ruta < 0 OR p.leido > 0 
GROUP BY p.id2
HAVING cantidad = total;

Answered by Andres on December 11, 2020

Add your own answers!

Related Questions

mi consulta mysql sale vacia

1  Asked on November 27, 2021

   

No logro usar ALERT en JAVAFX

1  Asked on November 27, 2021 by alexvargas6

   

Llamar a Procedimiento almacenado de SQL usando PHP

1  Asked on November 27, 2021 by pike

       

recibir json y enviar los parametros al modelo

0  Asked on November 27, 2021 by carlos-enrique-gil-gil

     

Nulo en model mvc

1  Asked on November 27, 2021

       

Obtener error 404 Angular 4

1  Asked on November 24, 2021 by gerardo-gutirrez

 

Obtener JSON en PHP mediante cURL

1  Asked on November 24, 2021 by senseye3led

       

Ordenar los objetos de un array a partir de una propiedad

1  Asked on November 24, 2021 by francisco-javier-lopez-perez

         

Error al leer de un fichero Excel(*.xlxs,*.xls)

1  Asked on November 24, 2021 by rurquiza

 

¿como configuro regla firestore para borrado?

1  Asked on November 24, 2021 by marcos-galaviz

   

Problemas con ejs

1  Asked on November 24, 2021 by scc38

   

CSS – menú fijo al final de la página

2  Asked on November 24, 2021

         

Diferencia entre @RequestParam y @RequestBody

2  Asked on November 24, 2021 by gonzalo

   

Ask a Question

Get help from others!

© 2022 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, MenuIva, UKBizDB, Menu Kuliner, Sharing RPP