sqlite 是否可以在一个SQL语句中完成此操作?

63lcw9qa  于 2023-06-06  发布在  SQLite
关注(0)|答案(2)|浏览(179)

我在一个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
1cosmwyk

1cosmwyk1#

只需使用条件聚合,并明确使用INNER JOIN...ON的显式连接的当前SQL标准(而不是使用WHERE子句的旧隐式连接)。

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,
    sum(s.gender = 'Male') as male_students,
    sum(s.gender = 'Female') as female_students
 
FROM rosters r
INNER JOIN students s
  ON r.perm_id = s.perm_id
INNER JOIN gradebooks g
  ON r.gradebook_number = g.gradebook_number
GROUP BY g.period
ORDER BY g.period
dgjrabp2

dgjrabp22#

使用case语句分别计数(使用sum)make和female:

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,
  sum(case when s.gender = 'M' then 1 else 0 end) as male,
  sum(case when s.gender = 'F' then 1 else 0 end) as female
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

相关问题