我在一个SQLite DB文件中有3个表。如果你不熟悉,就像我不熟悉一样,它能够处理大多数SQL SELECT语句,但它不是完全成熟的企业能力,以防影响你的策略。
我觉得我知道这是可行的,但我已经很久没有写过半复杂的SELECT语句了。我想不明白,所以我想我应该向专业人士求助。
这3个表包含学生成绩册数据。我在做一个简单的学生统计数据汇总。我希望最终有一个查询返回这些结果。
| 班级|学生人数|百分比|GPA|男性|女性|
| - -----|- -----|- -----|- -----|- -----|- -----|
| 阶段1|三十七|八十四点一|3.11|十八岁|十一|
| 阶段2|三十二|七十八点四|3.01|十六|十五|
| 阶段3|三十四|88.0| 2.37|十四|十三|
表如下所示(我已经删除了这里不相关的字段)。在SQLite中,text类似于varchar(255),真实的基本上是一个float。我意识到这些字段中的一些似乎应该是整数,但这是一个单独的外部问题,我们不需要在这里解决。
Table: Gradebook
gradebook_number, text
period, text
Table: rosters
gradebook_number, text
perm_id, text # this is the student id number
percent, real
Table: students
perm_id, text
gender, text
gpa, real
计算出学生人数、平均百分比和平均GPA不是问题。但我不知道怎么数男女的数目。以下是我到目前为止的声明。
SELECT g.period, count(s.perm_id) as num_students, round(avg(r.percent),2) as percent,
round(avg(s.gpa),2) as school_gpa
FROM rosters r, students s, gradebooks g
WHERE r.perm_id = s.perm_id AND r.gradebook_number = g.gradebook_number
GROUP BY g.period
ORDER BY g.period
2条答案
按热度按时间1cosmwyk1#
只需使用条件聚合,并明确使用
INNER JOIN...ON
的显式连接的当前SQL标准(而不是使用WHERE
子句的旧隐式连接)。dgjrabp22#
使用
case
语句分别计数(使用sum
)make和female: