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)
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
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP