如何从出勤表中获得最大出勤率的student_id?

时间:2018-09-28 15:44:27

标签: mysql sql database

我有一个如下的表'tbl_student_daily_attendance'

daily_id|stud_id|status
1       |1      |0
2       |1      |1
3       |1      |0
4       |1      |1
5       |2      |1
6       |2      |1
7       |2      |0
8       |2      |1

状态列代表当前和不存在,分别为1和0。

我想要的输出是显示状态最大的stud_id(即status = 1)

在上述情况下,它应返回stud_id = 2

4 个答案:

答案 0 :(得分:0)

您可以尝试通过stud_id中的status = 1来获取总金额。然后按总量排序并获得第一个(最大存在(即status = 1))

查询#1

SELECT stud_id
FROM tbl_student_daily_attendance t1
GROUP BY stud_id
ORDER BY SUM(status = 1)  DESC
LIMIT 1;

结果

| stud_id |
| ------- |
| 2       |

View on DB Fiddle

答案 1 :(得分:0)

您可以使用下面的子查询

 select stud_id
   from 
 tbl_student_daily_attendance
 group by stud_id
 having sum(status) =
  (  select max(s) from
    (select sum(status) s,
   stud_id
   from tbl_student_daily_attendance
   group by stud_id
   ) t1
  )

https://www.db-fiddle.com/f/dLMJQwG44HooExXUnLfTyn/1

答案 2 :(得分:0)

我将GROUP BYSUM()一起使用:

SELECT stud_id
FROM tbl_student_daily_attendance t1 s
GROUP BY stud_id
ORDER BY SUM(status) DESC
LIMIT 1;

这只会给出一行,如果您与其他学生的礼物有联系,则可以:

SELECT stud_id
FROM tbl_student_daily_attendance t1 s
GROUP BY stud_id
HAVING SUM(status) = (SELECT MAX(status)
                      FROM (SELECT stud_id, SUM(status) as status
                            FROM tbl_student_daily_attendance t1 s
                            GROUP BY stud_id
                           )
                     );

答案 3 :(得分:0)

您可以做的是利用子查询来处理该方案。 首先,您可以将stud_id及其对应的计数通过将其在学生ID上与状态的where子句进行分组来获取。

Select stud_id,count(*) as count from tbl_student_daily_attendance where status=1 
group by stud_id

然后,根据上述查询结果,您可以获取带有学生ID的最大计数。完整的查询如下所示:

select stud_id,max(count) from (Select stud_id,count(*) as count from 
tbl_student_daily_attendance where status=1 group by stud_id);

我希望这会有所帮助!