I have a query with some filters applied and then I want to use the same query but with one column condition removed to group and count categories on that column to use it as facets and let user know how many results belongs to that category. This is my query for a single facet:
SELECT
"solutionFormats"."name" AS LABEL,
MAX(CAST("solutionFormats"."id" AS TEXT)) AS VALUE,
COUNT("solutionFormats"."name") AS COUNT
FROM
"homework_entity" "homework"
LEFT JOIN "user_entity" "author" ON "author"."id" = "homework"."authorId"
AND ("author"."deletedAt" IS NULL)
LEFT JOIN "domain_entity" "domain" ON "domain"."id" = "homework"."domainId"
AND ("domain"."deletedAt" IS NULL)
LEFT JOIN "homework_entity_definitions_definition_entity" "homework_definitions" ON "homework_definitions"."homeworkEntityId" = "homework"."id"
LEFT JOIN "definition_entity" "definitions" ON "definitions"."id" = "homework_definitions"."definitionEntityId"
AND ("definitions"."deletedAt" IS NULL)
LEFT JOIN "homework_entity_theorems_theorem_entity" "homework_theorems" ON "homework_theorems"."homeworkEntityId" = "homework"."id"
LEFT JOIN "theorem_entity" "theorems" ON "theorems"."id" = "homework_theorems"."theoremEntityId"
AND ("theorems"."deletedAt" IS NULL)
LEFT JOIN "homework_entity_tags_tag_entity" "homework_tags" ON "homework_tags"."homeworkEntityId" = "homework"."id"
LEFT JOIN "tag_entity" "tags" ON "tags"."id" = "homework_tags"."tagEntityId"
AND ("tags"."deletedAt" IS NULL)
LEFT JOIN "homework_entity_solution_formats_solution_format_entity" "homework_solutionFormats" ON "homework_solutionFormats"."homeworkEntityId" = "homework"."id"
LEFT JOIN "solution_format_entity" "solutionFormats" ON "solutionFormats"."id" = "homework_solutionFormats"."solutionFormatEntityId"
LEFT JOIN "homeworks_book_content_entity" "homeworksBookContent" ON "homeworksBookContent"."homeworkId" = "homework"."id"
AND ("homeworksBookContent"."deletedAt" IS NULL)
WHERE
("homeworksBookContent"."id" IS NULL)
AND ("homework"."deletedAt" IS NULL)
GROUP BY
"solutionFormats"."name"
I have only 12 items in database, each of which might have multiple solutionFormats
(in my case there is always one format). The query group and counts these formats but the results are wrong (numbers are above 12) because of multiple left joins (required for potential filtering on other columns). How to do it properly? I was thinking about leaving only those rows which have unique (id, solutionFormat.name)
pairs before grouping but again, how to do it?