SQL语句统计排行前10

哇,好久没来CSDN了,正好遇到了自己的一个盲区,场景:公司每天要进行打卡上班,每个人每天也可以多次打卡,所有打卡信息记录到表A 中,表A中有name, date, time 等字段。
a. 要统计今天迟到的人的名单,请写出相应的SQL。
b. 每月会统计迟到次数排行前十的人的名单,请写出相应的SQL。

CREATE TABLE A(NAME VARCHAR(50),DATE DATETIME,TIME TIME);
INSERT  INTO `a`(`name`,`date`,`time`) VALUES 
('张01','2021-02-17','08:50:00'),
('张02','2021-02-17','09:12:00'),
('张03','2021-02-17','09:13:00'),
('张04','2021-02-17','09:14:00'),
('张05','2021-02-17','09:12:00'),
('张06','2021-02-17','09:13:00'),
('张07','2021-02-17','09:14:00'),
('张02','2021-02-17','09:12:00'),
('张03','2021-02-17','09:13:00'),
('张04','2021-02-17','09:14:00'),
('张05','2021-02-17','09:12:00'),
('张06','2021-02-17','09:13:00'),
('张07','2021-02-17','09:14:00'),
('张02','2021-02-17','09:12:00'),
('张03','2021-02-17','09:13:00'),
('张04','2021-02-17','09:14:00'),
('张07','2021-02-17','09:14:00'),
('张02','2021-02-17','09:12:00'),
('张03','2021-02-17','09:13:00'),
('张04','2021-02-17','09:14:00'),
('张05','2021-02-17','09:12:00'),
('张08','2021-02-17','09:12:00'),
('张09','2021-02-17','09:13:00'),
('张10','2021-02-17','09:14:00'),
('张11','2021-02-17','09:12:00'),
('张11','2021-02-17','09:12:00'),
('张09','2021-02-17','09:13:00'),
('张10','2021-02-17','09:14:00'),
('张12','2021-02-17','09:12:00');

通过上述SQL脚本,我们创建一张简单的数据表,并插入一些数据,方便我们进行统计。首先来解决第一个问题:
a. 要统计今天迟到的人的名单,请写出相应的SQL。
这个问题相对简单的多,只需确定一下当前时间即可,以当前日期:2021-02-17,上班时间为9:00为例,相当简单:

SELECT NAME,DATE,TIME FROM A WHERE DATE='2021-02-17' AND TIME>'9:00'

在这里插入图片描述

第二个问题:b. 每月会统计迟到次数排行前十的人的名单,请写出相应的SQL。 相对就要复杂的多了,首先我们得统计出迟到的数据,可问题的就在于怎么统计迟到的人员并确定是当月的,还要进行排序,并筛选迟到次数最多的前十,那么这时候就需要借助内置函数COUNT(*)聚合函数GROUP BY来进行统计人员的迟到次数,难就难在对聚合函数的运用,那么这时候我们就要了解一下什么是聚合函数了。所谓的聚合函数,即:对一组行中的某列执行计算,并返回单个值,GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组,这么说可能还有点懵,那么我们用实际效果来进行体会:
以前时间2021年,当月02月统计为例:

SELECT NAME,DATE,TIME,COUNT(*) AS COUNT FROM A
GROUP BY NAME,TIME,DATE 
HAVING NAME IN(SELECT t.name FROM (SELECT NAME,DATE,TIME, MONTH(DATE) 
AS MONTH,YEAR(DATE) AS YEAR FROM A WHERE TIME>'9:00' ) t WHERE t.year='2021' 
AND t.month=2) 
ORDER BY COUNT DESC
LIMIT 10

这时候一切就迎刃而解了,统计如图:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42799562/article/details/113851291