Contar columna en múltiples inner join
Quiero obtener el recuento de agrupaciones (bebeliotheque.type), funciona pero cuando agrego campos many2many múltiples para obtener varios libros o varios empleadores para cada fila de bebeliotheque, mi recuento aumenta.
¿Cómo obtener el recuento real de agrupaciones (bebeliotheque tipo)?
Ejemplo en db<>fiddle: aquí
Echa un vistazo a la lista de mi aplicación bebeliotheque, he agrupado todos los nombres de bebeliotheque iguales pero tengo una cantidad incorrecta (recuento).
Vista previa:
imagen > http://rezigdev.com/image_202112522328.jpg
video > https://rezigdev.com/preview.mp4
Consulta SQL:
SELECT
bibliotheque.name, GROUP_CONCAT(book.name) AS books, GROUP_CONCAT(employers.name) AS employers, COUNT(bibliotheque.name)
FROM
bibliotheque
LEFT JOIN
x_x_bibliotheque_book
ON x_x_bibliotheque_book.bibliotheque_id = bibliotheque.id
LEFT JOIN
book
ON x_x_bibliotheque_book.book_id = book.id
LEFT JOIN
x_x_bibliotheque_employers
ON x_x_bibliotheque_employers.bibliotheque_id = bibliotheque.id
LEFT JOIN
employers
ON x_x_bibliotheque_employers.employer_id = employers.id
GROUP BY
bibliotheque.name
davy.ai
Para obtener el recuento real de agrupaciones (tipo biblioteca) en el escenario dado, es necesario utilizar la función COUNT(DISTINCT) con la columna adecuada de la tabla de agrupación.
Por ejemplo, para obtener el recuento de nombres de bibliotecas distintas en la cláusula GROUP BY, puede modificar la consulta de la siguiente manera:
En esta consulta modificada, hemos agregado una nueva columna a la cláusula SELECT que cuenta el número de nombres de bibliotecas distintas para cada tipo de biblioteca.
Tenga en cuenta que hemos utilizado una función COUNT(DISTINCT) en lugar de la función COUNT() regular para evitar la doble contabilización de nombres de bibliotecas debido a las relaciones de muchos a muchos con libros y empleados.
Con esta consulta modificada, debería obtener el recuento correcto de bibliotecas para cada tipo, incluso si tienen múltiples libros o empleados asociados.