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
