There is a layer with 10 different species (variabel name is "sp") across the whole extent with names "1", "2", "3", .. , "10" and a layer with the grid cells (variable name = "id") numbered consecutively, from 1 to 150.
In the attribute table of the below screenshot you see that I selected the grid cell with id=1 and the points (=species) within this cell. There are 8 individuals - "4", "5", "6" and "10" occure once, whereas "2" and "8" occure twice.
The query table in the screenshot is the result for (3).
For (1) you have to query for points/species within grid cells and group over grid cells and species and take the count from that aggregation
SELECT t.gID AS gID, t.sp AS Sp, count(*) AS NrIndSp FROM (SELECT g.id AS gID, s.sp AS sp FROM grid AS g JOIN Sp_distr AS s ON within(s.Geometry, g.Geometry) ) as t GROUP BY t.gId, t.sp
For (2) you simple need to query for points/species within grid cells and aggregate over grid cells:
Select t.gID, count(*) as NrInd From (SELECT g.id AS gID, s.sp AS sp FROM grid AS g JOIN Sp_distr AS s ON within(s.Geometry, g.Geometry) ) as t GROUP BY t.gID ORDER BY t.gID
For (3) you'll first need to aggregate over grid cells and points/species, and then again aggregate over this query table by grid cells which will finally give you the distinct species!
SELECT v.gID, count(*) AS SpNr FROM (SELECT t.gID, t.sp FROM (SELECT g.id AS gID, s.sp AS sp FROM grid AS g JOIN Sp_distr AS s ON within(s.Geometry, g.Geometry) ) as t GROUP BY t.gId, t.sp ) as v GROUP BY v.gId
No comments :
Post a Comment