【问题标题】:Sql count query from different value on same column来自同一列上不同值的 Sql 计数查询
【发布时间】:2014-09-02 19:39:45
【问题描述】:

我有一个看起来像这样的表,名为new_attendance

Student_id | Attendance | Date       | Class     |Subject
-----------------------------------------------
2010639201 | No         |  1/10/2014 | Lecture   | CSC435
2010639202 | Yes        |  3/10/2014 | Tutorial  | CSC240
2010639203 | Yes        | 10/10/2014 | Tutorial  | CSP650
2010639201 | No         |  2/10/2014 | Lab       | CSC520
2010639201 | No         |  4/10/2014 | Tutorial  | ITT545
2010639204 | No         |  5/10/2014 | Tutorial  | CSP600
2010639205 | No         |  6/10/2014 | Tutorial  |ITT550
2010639206 | No         |  7/10/2014 | Lab       | CSC520

如何编写 SQL 计数查询来计算缺勤人数(出席人数 =“No”)和班级人数?

预期输出:

Student_id|No of absent|% of Absent|
------------------------------------
2010639202|3|3.57%

公式:

% of absent= ((no absent* (Lab+ Tutorial+ Lecture) ) / (14* subject_contachour) *100

【问题讨论】:

  • 能否提供预期的输出?

标签: sql select count


【解决方案1】:

你可以这样做

CREATE TABLE new_attendance (student_id INT(11), attendance binary,
class VARCHAR(20), att_date DATE);

INSERT INTO `new_attendance` (`student_id`, `attendance`, `class`, `att_date`) VALUES
(2323,1,'CCNA','2013-09-12'), 
(453,0,'CCNA','2013-09-12'), 
(2435,1,'PHP','2013-09-12'), 
(324,0,'PHP','2013-09-12'), 
(2546,1,'CCNA','2013-09-12'), 
(897,0,'PHP','2013-09-12') 

SELECT `class`, count(*) AS total
FROM `new_attendance`
WHERE `attendance` = 0
GROUP BY `class`

结果是这样的

Class                 total
CCNA                    1
PHP                     2     

【讨论】:

  • 每个科目都应该有讲座、实验室和教程。如何将查询编码为 Lecture=2hours、lab=2hours 和 tutorial=1hour?
  • @user3838126 这意味着你的桌子上有讲座、实验室和教程列,它们的类型都是时间?
  • @user3830126 你想查询结果应该是缺席学生和只有一个教程和两个讲座和两个实验室的班级数吗?
  • 是的。在我的表中有讲座、实验室和教程。然后我需要根据特定主题的讲座、实验室和教程来计算学生没有参加的总小时数。这样的公式:缺席百分比=(学生缺课总小时数)/(14*subjectcontacthour)*100
  • 例如,一名学生没有参加 CSC435 之类的一门科目,他们有 2 天没有参加。 2天可能是CSC435的讲座和教程。如何解决?
【解决方案2】:

看起来这就是您要找的东西:

SELECT `Class`, count(*)
FROM `new_attendance`
WHERE `Attendance` = 'No'
GROUP BY `Class`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-08
    • 2021-10-08
    • 1970-01-01
    • 2017-04-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多