首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >sqlite计算每一个入口和出口作为一个入口

sqlite计算每一个入口和出口作为一个入口
EN

Stack Overflow用户
提问于 2019-08-07 07:38:20
回答 1查看 43关注 0票数 0

假设我们有一个类,对于这个类,每个学生都可以多次进入和退出,而我将它们存储在数据库中(每次输入和每次进入课堂后退出),例如:

代码语言:javascript
运行
复制
`id`, `student_id`,   `session_id`, `enter`, `exit`, `date_time`

 '1',   '123',          '1',          '1',     '0',     '---',      #enter
 '1',   '123',          '1',          '1',     '1',     '---',      #exit

123 id的学生输入到类,即1输入到类中,而我通过enter = 1 and exit = 0创建行

退出课堂后,我又有了一个新行,名为enter = 1 and exit = 1

我应该拥有这个结构,不能在一行中更改它们,这意味着我不能更新现有的行。现在,这个学生可以在存储输入数据后多次进入课堂并退出,

实际上,这个学生只是一个进入课堂并退出指定类的人,session_id = 1,现在我如何计算这个操作并从数据库中获取?我不需要计算学生在课堂上的表现,我只需要把多次进入课堂的所有学生计数为一次记录。

DB-FILLDLE示例sql

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-07 07:53:58

我认为您可以使用条件聚合来实现您想要的结果,将enter = 1exit = 0作为登录的情况之和,以及enter = 1exit = 1作为注销的情况之和。还可以通过将查询写入JOIN来简化查询。

代码语言:javascript
运行
复制
select s.id, s.session_name, s.session_type, s.date_time,
       sum(case when b.enter = '1' and b.exit = '0' then 1 else 0 end) as logins,
       sum(case when b.enter = '1' and b.exit = '1' then 1 else 0 end) as logouts,
       sum(case when b.enter = '1' and b.exit = '0' then 1 else 0 end) - sum(case when b.enter = '1' and b.exit = '1' then 1 else 0 end) as person
from sessions s
left join barcodes b on b.session_id = s.id
group by s.id

输出:

代码语言:javascript
运行
复制
id  session_name    session_type    date_time   logins  logouts person
1   class_a         1               ---         4       2       2
2   class_b         2               ---         2       0       2

dbfiddle演示

如果您只想要每个会话的学生人数(登录或退出),则可以计算该会话的不同条形码:

代码语言:javascript
运行
复制
select s.id, s.session_name, s.session_type, s.date_time,
       count(distinct b.barcode) as person
from sessions s
left join barcodes b on b.session_id = s.id
group by s.id

输出:

代码语言:javascript
运行
复制
id  session_name    session_type    date_time   person
1   class_a         1               ---         3
2   class_b         2               ---         1

dbfiddle演示

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57389244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档