Project

General

Profile

1
-- -----------------------------------------------------------------------------
2
-- Quantitative validation queries against the original SALVIAS database
3
-- -------------------------------------------------------------------------
4

    
5
-- ------------------
6
-- Set variables specific to this source
7
-- Currently configured for SALVIAS
8
-- ------------------
9

    
10
USE salvias_plots;
11

    
12
-- SALVIAS projects in BIEN
13
-- Must filter out all others as not all SALVIAS plots exported to BIEN
14
SET @p = "'Gentry Transect Dataset','Boyle Transects','Enquist Lab Transect Dataset','ACA Amazon Forest Inventories','Bonifacino Forest Transects','Cam Webb Borneo Plots','DeWalt Bolivia forest plots','La Selva Secondary Forest Plots','Noel Kempff Forest Plots','Noel Kempff Savanna Plots','OTS Transects','Pilon Lajas Treeplots Bolivia','RAINFOR - 0.1 ha Madre de Dios, Peru','RAINFOR - 1 ha Peru'";
15

    
16
-- ------------------
17
-- 1. Count of projects
18
-- ------------------
19
SET @sql= CONCAT('
20
SELECT COUNT(*) AS projects
21
FROM projects 
22
WHERE project_name IN (',@p,')
23
LIMIT 10
24
');
25
PREPARE stmt FROM @sql;
26
EXECUTE stmt;
27

    
28
-- ------------------
29
-- 2. List of project names
30
-- ------------------
31
SET @sql= CONCAT('
32
SELECT project_name AS projectname 
33
FROM projects 
34
WHERE project_name IN (',@p,')
35
LIMIT 10
36
');
37
PREPARE stmt FROM @sql;
38
EXECUTE stmt;
39

    
40
-- ------------------
41
-- 3. Count of all plots in this source
42
-- ------------------
43
SET @sql= CONCAT('
44
SELECT COUNT(DISTINCT SiteCode) AS plots
45
FROM projects p JOIN PlotMetadata pm
46
ON p.project_id=pm.project_id
47
WHERE p.project_name IN (',@p,')
48
LIMIT 10
49
');
50
PREPARE stmt FROM @sql;
51
EXECUTE stmt;
52

    
53
-- ------------------
54
-- 4. Count of plots in each project in this source
55
-- ------------------
56
SET @sql= CONCAT('
57
SELECT p.project_name, COUNT(*) AS plots
58
FROM projects p JOIN PlotMetadata pm
59
ON p.project_id=pm.project_id
60
WHERE p.project_name IN (',@p,')
61
GROUP BY p.project_name
62
LIMIT 10
63
');
64
PREPARE stmt FROM @sql;
65
EXECUTE stmt;
66

    
67
-- ------------------
68
-- 5.List of plot codes by project
69
-- ------------------
70
SET @sql= CONCAT('
71
SELECT p.project_name, pm.SiteCode
72
FROM projects p JOIN PlotMetadata pm
73
ON p.project_id=pm.project_id
74
WHERE p.project_name IN (',@p,')
75
LIMIT 10
76
');
77
PREPARE stmt FROM @sql;
78
EXECUTE stmt;
79

    
80
-- ------------------
81
-- 6. List of plots with stem measurements
82
-- ------------------
83
SET @sql= CONCAT('
84
SELECT DISTINCT p.project_name, pm.SiteCode
85
FROM projects p JOIN PlotMetadata pm 
86
JOIN PlotObservations po JOIN stems s
87
ON p.project_id=pm.project_id AND pm.PlotID=po.PlotID
88
AND po.PlotObsID=s.plotobs_id
89
WHERE p.project_name IN (',@p,')
90
GROUP BY p.project_name, SiteCode
91
ORDER BY p.project_name, SiteCode
92
LIMIT 10
93
');
94
PREPARE stmt FROM @sql;
95
EXECUTE stmt;
96

    
97
-- ------------------
98
-- 7.List of plots with counts of individuals per species
99
-- ------------------
100
SET @sql= CONCAT('
101
SELECT DISTINCT p.project_name, pm.SiteCode
102
FROM projects p JOIN PlotMetadata pm JOIN PlotObservations po
103
ON p.project_id=pm.project_id AND pm.PlotID=po.PlotID
104
WHERE p.project_name IN (',@p,')
105
AND po.NoInd>1
106
GROUP BY p.project_name, SiteCode
107
ORDER BY p.project_name, SiteCode
108
LIMIT 10
109
');
110
PREPARE stmt FROM @sql;
111
EXECUTE stmt;
112

    
113
-- ------------------
114
-- 8.List of plots which use percent cover
115
-- ------------------
116
SET @sql= CONCAT('
117
SELECT DISTINCT p.project_name, pm.SiteCode
118
FROM projects p JOIN PlotMetadata pm JOIN PlotObservations po
119
ON p.project_id=pm.project_id AND pm.PlotID=po.PlotID
120
WHERE p.project_name IN (',@p,')
121
AND cover_percent IS NOT NULL
122
GROUP BY p.project_name, SiteCode
123
ORDER BY p.project_name, SiteCode
124
LIMIT 10
125
');
126
PREPARE stmt FROM @sql;
127
EXECUTE stmt;
128

    
129
-- ------------------
130
-- 9.List of plots which use line-intercept
131
-- ------------------
132
SET @sql= CONCAT('
133
SELECT DISTINCT p.project_name, pm.SiteCode
134
FROM projects p JOIN PlotMetadata pm JOIN PlotObservations po
135
ON p.project_id=pm.project_id AND pm.PlotID=po.PlotID
136
WHERE p.project_name IN (',@p,')
137
AND intercept_cm IS NOT NULL
138
GROUP BY p.project_name, SiteCode
139
ORDER BY p.project_name, SiteCode
140
LIMIT 10
141
');
142
PREPARE stmt FROM @sql;
143
EXECUTE stmt;
144

    
145
-- ------------------
146
-- 10. Count of individuals per plot in each project
147
--
148
-- Method: Sum on NoInd (number of individuals) column.
149
-- Note 1: `individuals` should be NULL for plots which use percent cover
150
-- or line-intercept methods.
151
-- Note 2: Do not count records in PlotObservations table, as this will give
152
-- incorrect total for plots such as Gentry plot, which count individuals
153
-- per species per subplot
154
-- ------------------
155
SET @sql= CONCAT('
156
SELECT p.project_name, SiteCode AS plotcode, 
157
SUM(NoInd) AS individuals
158
FROM projects p JOIN PlotMetadata pm JOIN PlotObservations po
159
ON p.project_id=pm.project_id AND pm.PlotID=po.PlotID
160
WHERE p.project_name IN (',@p,')
161
GROUP BY p.project_name, SiteCode
162
ORDER BY p.project_name, SiteCode
163
LIMIT 10
164
');
165
PREPARE stmt FROM @sql;
166
EXECUTE stmt;
167

    
168
-- ------------------
169
-- 11. Count of stems per plot in each project
170
-- 
171
-- Method: count records in stems table
172
-- ------------------
173
SET @sql= CONCAT('
174
SELECT p.project_name, SiteCode AS plotcode, 
175
COUNT(DISTINCT stem_id) AS stems
176
FROM projects p JOIN PlotMetadata pm 
177
JOIN PlotObservations po JOIN stems s
178
ON p.project_id=pm.project_id AND pm.PlotID=po.PlotID
179
AND po.PlotObsID=s.plotobs_id
180
WHERE p.project_name IN (',@p,')
181
GROUP BY p.project_name, SiteCode
182
ORDER BY p.project_name, SiteCode
183
LIMIT 10
184
');
185
PREPARE stmt FROM @sql;
186
EXECUTE stmt;
187

    
188
-- ------------------
189
-- 12. Count of verbatim taxa per plot in each project
190
-- 
191
-- Note: Assumes identical concatenation of taxonomic fields
192
--       to form verbatim taxon name in vegBIEN
193
-- ------------------
194
SET @sql= CONCAT("
195
SELECT project_name, plotcode, COUNT(taxon) AS taxa
196
FROM
197
(
198
SELECT DISTINCT p.project_name, SiteCode AS plotcode, 
199
TRIM(CONCAT_WS(' ',IFNULL(Family,''),IFNULL(Genus,''),IFNULL(Species,''),
200
IF(infra_ep_1 IS NULL,IFNULL(auth,''),
201
TRIM(CONCAT_WS(' ',IFNULL(infra_rank_1,''),IFNULL(infra_ep_1,''),IFNULL(infra_auth_1,'')))
202
))) AS taxon
203
FROM projects p JOIN PlotMetadata pm JOIN PlotObservations po
204
ON p.project_id=pm.project_id AND pm.PlotID=po.PlotID
205
WHERE p.project_name IN (",@p,")
206
) AS a
207
GROUP BY project_name, plotcode 
208
ORDER BY project_name, plotcode
209
LIMIT 10
210
");
211
PREPARE stmt FROM @sql;
212
EXECUTE stmt;
213

    
214
-- ------------------
215
-- 13. List of distinct verbatim taxa in each plot in each project
216
-- 
217
-- Note: Assumes identical concatenation of taxonomic fields
218
--       to form verbatim taxon name in vegBIEN. 
219
-- ------------------
220
SET @sql= CONCAT("
221
SELECT DISTINCT p.project_name, SiteCode AS plotcode, 
222
TRIM(CONCAT_WS(' ',IFNULL(Family,''),IFNULL(Genus,''),IFNULL(Species,''),
223
IF(infra_ep_1 IS NULL,IFNULL(auth,''),
224
TRIM(CONCAT_WS(' ',IFNULL(infra_rank_1,''),IFNULL(infra_ep_1,''),IFNULL(infra_auth_1,'')))
225
))) AS taxon
226
FROM projects p JOIN PlotMetadata pm JOIN PlotObservations po
227
ON p.project_id=pm.project_id AND pm.PlotID=po.PlotID
228
WHERE p.project_name IN (",@p,")
229
ORDER BY p.project_name, SiteCode, taxon 
230
LIMIT 10
231
");
232
PREPARE stmt FROM @sql;
233
EXECUTE stmt;
234

    
235
-- ------------------
236
-- 14. Count of individuals per (verbatim) taxon per plot in each project 
237
-- 
238
-- Note: Assumes identical concatenation of taxonomic fields
239
--       to form verbatim taxon name in vegBIEN
240
-- ------------------
241
SET @sql= CONCAT("
242
SELECT DISTINCT p.project_name, SiteCode AS plotcode, 
243
TRIM(CONCAT_WS(' ',IFNULL(Family,''),IFNULL(Genus,''),IFNULL(Species,''),
244
IF(infra_ep_1 IS NULL,IFNULL(auth,''),
245
TRIM(CONCAT_WS(' ',IFNULL(infra_rank_1,''),IFNULL(infra_ep_1,''),IFNULL(infra_auth_1,'')))
246
))) AS taxon,
247
SUM(NoInd) AS individuals
248
FROM projects p JOIN PlotMetadata pm JOIN PlotObservations po
249
ON p.project_id=pm.project_id AND pm.PlotID=po.PlotID
250
WHERE p.project_name IN (",@p,")
251
GROUP BY p.project_name, SiteCode, taxon
252
ORDER BY p.project_name, SiteCode, taxon 
253
LIMIT 10
254
");
255
PREPARE stmt FROM @sql;
256
EXECUTE stmt;
257

    
258
-- ------------------
259
-- 15. Percent cover of each (verbatim) taxon in each plot in each project
260
--      where percent cover is recorded
261
-- 
262
-- Note 1: Assumes identical concatenation of taxonomic fields
263
--       to form verbatim taxon name in vegbien
264
-- Note 2: Grouping mean cover for entire plot allows inclusion of plots with
265
--       subplots (separate cover measure for each species in each subplot),  
266
--       plots with strata (separate cover measures for each species in each 
267
--       stratum), and plots without subplots or strata (one cover measure 
268
--       per species per plot) in same query.
269
-- Note 3: currently, there are no SALVIAS percent cover plots in BIEN
270
-- ------------------
271
SET @sql= CONCAT("
272
SELECT DISTINCT p.project_name, SiteCode AS plotcode, 
273
TRIM(CONCAT_WS(' ',IFNULL(Family,''),IFNULL(Genus,''),IFNULL(Species,''),
274
IF(infra_ep_1 IS NULL,IFNULL(auth,''),
275
TRIM(CONCAT_WS(' ',IFNULL(infra_rank_1,''),IFNULL(infra_ep_1,''),IFNULL(infra_auth_1,'')))
276
))) AS taxon,
277
AVG(cover_percent) AS mean_cover
278
FROM projects p JOIN PlotMetadata pm JOIN PlotObservations po
279
ON p.project_id=pm.project_id AND pm.PlotID=po.PlotID
280
WHERE p.project_name IN (",@p,")
281
AND cover_percent IS NOT NULL
282
GROUP BY p.project_name, SiteCode, taxon
283
ORDER BY p.project_name, SiteCode, taxon 
284
LIMIT 10
285
");
286
PREPARE stmt FROM @sql;
287
EXECUTE stmt;
288

    
289
-- ------------------
290
-- 16. Intercept values for each (verbatim) taxon in each plot in each project
291
--      where line-intercept values are recorded
292
-- 
293
-- Note 1: Assumes identical concatenation of taxonomic fields
294
--       to form verbatim taxon name in vegbien
295
-- Note 2: Grouping mean cover for entire plot combines plots with
296
--       subplots (separate cover measure for each species in each subplot) with 
297
--       plots with strata (separate cover measures for each species in each 
298
--       stratum) with plots without subplots or strata (one cover measure 
299
--       per species per plot.
300
-- ------------------
301
SET @sql= CONCAT("
302
SELECT DISTINCT p.project_name, SiteCode AS plotcode, 
303
TRIM(CONCAT_WS(' ',IFNULL(Family,''),IFNULL(Genus,''),IFNULL(Species,''),
304
IF(infra_ep_1 IS NULL,IFNULL(auth,''),
305
TRIM(CONCAT_WS(' ',IFNULL(infra_rank_1,''),IFNULL(infra_ep_1,''),IFNULL(infra_auth_1,'')))
306
))) AS taxon,
307
intercept_cm
308
FROM projects p JOIN PlotMetadata pm JOIN PlotObservations po
309
ON p.project_id=pm.project_id AND pm.PlotID=po.PlotID
310
WHERE p.project_name IN (",@p,") 
311
AND intercept_cm IS NOT NULL 
312
ORDER BY p.project_name, SiteCode, taxon 
313
LIMIT 10
314
");
315
PREPARE stmt FROM @sql;
316
EXECUTE stmt;
317

    
318
-- ------------------
319
-- 17. Count of subplots per plot, for each project
320
-- ------------------
321
SET @sql= CONCAT("
322
SELECT project_name, pm.SiteCode AS plotcode, COUNT(DISTINCT Line) as subplots
323
FROM projects p JOIN PlotMetadata pm JOIN PlotObservations po
324
ON p.project_id=pm.project_id AND pm.PlotID=po.PlotID
325
WHERE p.project_name IN (",@p,")
326
GROUP BY project_name, pm.SiteCode
327
ORDER BY project_name, pm.SiteCode 
328
LIMIT 10
329
");
330
PREPARE stmt FROM @sql;
331
EXECUTE stmt;
332

    
333
-- ------------------
334
-- 18. List of subplots codes for each plot for each project
335
-- 
336
-- Note: includes plots with and without subplots
337
-- ------------------
338
SET @sql= CONCAT("
339
SELECT DISTINCT project_name, pm.SiteCode AS plotcode, Line as subplot
340
FROM projects p JOIN PlotMetadata pm JOIN PlotObservations po
341
ON p.project_id=pm.project_id AND pm.PlotID=po.PlotID
342
WHERE p.project_name IN (",@p,")
343
AND pm.SiteCode IS NOT NULL
344
ORDER BY project_name, pm.SiteCode, subplot
345
LIMIT 10
346
");
347
PREPARE stmt FROM @sql;
348
EXECUTE stmt;
(2-2/2)