SQLite 3.36.2下COUNT、SUM、DATE查询编写求助(Hedgehog AS)
修正后的SQL查询及说明
- 核心问题:你的
timestamp字段存储的是月-日格式(如01-27),但DATE('now')返回YYYY-MM-DD格式的完整日期,两者无法匹配,这是所有查询出错的根本原因。 - 解决思路:提取当前日期的月-日部分与
timestamp字段匹配,同时明确各统计需求的逻辑。
1. 计数日观测到的鸟类总数(预期结果:15)
对计数日的birdTotalcount求和:
SELECT SUM(birdTotalcount) AS total_birds FROM bird_table WHERE timestamp = STRFTIME('%m-%d', 'now');
STRFTIME('%m-%d', 'now')提取当前日期的月-日部分,与你的timestamp字段格式完全匹配。
2. 计数日观测到的物种数量(预期结果:2)
统计计数日有记录的独立物种数:
SELECT COUNT(DISTINCT birdName) AS observed_species FROM bird_table WHERE timestamp = STRFTIME('%m-%d', 'now');
- 用
COUNT(DISTINCT birdName)确保每个物种仅统计一次,避免重复计数。
3. 计数日未观测到的物种数量(预期结果:3)
先统计当月所有出现过的物种总数,再减去计数日观测到的物种数:
SELECT ( -- 当月所有出现过的物种总数 SELECT COUNT(DISTINCT birdName) FROM bird_table WHERE STRFTIME('%m', timestamp) = STRFTIME('%m', 'now') ) - ( -- 计数日观测到的物种数 SELECT COUNT(DISTINCT birdName) FROM bird_table WHERE timestamp = STRFTIME('%m-%d', 'now') ) AS unobserved_species;
- 示例中当月共5种鸟类,计数日观测到2种,因此未观测的物种数为
5-2=3。
灵活调整说明
如果你的计数日是固定日期(比如每月27日),可以直接将条件写为WHERE timestamp = '01-27'(注意月份格式要和字段一致),但使用STRFTIME('%m-%d', 'now')能让查询自动适配当月的计数日,无需手动修改。
内容的提问来源于stack exchange,提问作者littleoldlady
相关产品推荐
相关产品推荐

