There is a possibility of using a "Virtual Layer" through Layer > Add Layer > Add/Edit Virtual Layer...
Let's assume there are two layers, a point layer called 'points' and a polygon layer called 'polygons', see the image below.

With the following query, it is possible to find out how many coyote observations are found within each of the categories.
SELECT
poly.*,
COUNT(*) AS "numpois"
FROM
"polygons" AS poly
JOIN
"points" AS poi
ON st_within(poi.geometry, poly.geometry)
GROUP BY
poly."id"
The output point layer with its attribute table will look like

Mind, that if some fields have to be concatenated then apply the GROUP_CONCAT()
function. So, the new query will look like
SELECT
poly.*,
COUNT(*) AS "numpois",
GROUP_CONCAT(poi."Coyote") AS Coyotes
FROM
"polygons" AS poly
JOIN
"points" AS poi
ON st_within(poi.geometry, poly.geometry)
GROUP BY
poly."id"
And the output
