que estoy tratando de contar el número de empresas que tienen al menos un producto de la siguiente consultaMySQL seleccionar la cuenta
SELECT count(*)
FROM company c
JOIN product p on c.id = product.company_id
WHERE p.is_deleted = 0
AND c.is_customer = 1
AND c.company_type_id = 5
GROUP by c.id
lo tanto, esto me muestra una lista de todas las empresas, y el recuento de los productos para cada empresa.
Lo que estoy tratando de lograr es un recuento de empresas del resultado anterior.
Esto se puede lograr de la siguiente manera:
SELECT count(*)
FROM (
SELECT count(*)
FROM company c
JOIN product p on c.id = product.company_id
WHERE p.is_deleted = 0
AND c.is_customer = 1
and c.company_type_id = 5
GROUP by c.id) AS t1
lo tanto, esto me da el resultado correcto, pero sólo me pregunto si hay una manera más eficiente de hacer las cosas.
Parece que usted ha hecho un buen trabajo aquí. No veo la posibilidad de mejorar a menos que realmente sufras problemas de rendimiento. – BigFatBaby
¡Seguramente la consulta anterior siempre devolverá 1? Usted tiene un 'COUNT (*)' que devuelve un solo campo, luego 'SELECT COUNT (*)' nuevamente para un solo campo ... ¿Me falta algo? – anothershrubery
@another: el conteo interno (*) tiene un 'group by' - devuelve un conteo por compañía – Blorgbeard