【问题标题】:syntax error in calculation of attendance % in mysql在mysql中计算出勤率时出现语法错误
【发布时间】:2018-12-06 04:18:47
【问题描述】:
SELECT name, DISTINCT studentid, count(attendance) 
 from attendance a,students s 
 where attendance = 'p'and s.studentid=a.studentid  
having count(attendance)<3/4*sum(attendance);

我有 2 个表出勤率和学生,我想从中选择学生的姓名(来自学生表)和出勤率(来自出勤表),其中 studentid 是那些出勤率

【问题讨论】:

  • 错误信息是什么?

标签: mysql


【解决方案1】:

你可以试试这样的:

数据准备

create table attendance (studentid int, attendance char(1));

insert into attendance values (1,'p'),(1,'a'),(2,'p'),(2,'p'),(2,'a'),(3,'p');

数据

select * from students;
+-----------+------+
| studentid | name |
+-----------+------+
|         1 | John |
|         2 | Matt |
|         3 | Mary |
+-----------+------+

select * from attendance;
+-----------+------------+
| studentid | attendance |
+-----------+------------+
|         1 | p          |
|         1 | a          |
|         2 | p          |
|         2 | p          |
|         2 | a          |
|         3 | p          |
+-----------+------------+

查询

select s.*, a.total, a.p_present
from students s
inner join (
    select studentid, count(*) as total, sum(case attendance when 'p' then 1 else 0 end) * 100/count(*) as p_present
    from attendance
    group by studentid
) a on s.studentid = a.studentid
where a.p_present < 75 ;

结果

+-----------+------+-------+-----------+
| studentid | name | total | p_present |
+-----------+------+-------+-----------+
|         1 | John |     2 |   50.0000 |
|         2 | Matt |     3 |   66.6667 |
+-----------+------+-------+-----------+

p_present 是存在百分比。请注意,John 和 Matt 的出席率分别为 50% 和 66.6%。

说明

为了获得总记录,我们会这样做:

select studentid, count(*)
from attendance
group by studentid;

为了获得每个学生在场的总时间,我们会这样做:

select studentid, sum(case attendance when 'p' then 1 else 0 end)
from attendance
group by studentid;

出席百分比将是学生出席的次数除以总数。所以,这就是我在子查询中所做的。

一旦有关学生的数据可用,将该结果与学生的信息相结合,并从两个表中提取所需的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-27
    • 2014-01-19
    • 2018-08-01
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    相关资源
    最近更新 更多