SQL语句统计排行前10
SQL语句统计排行前10
- 引言
- 一、创建表
- 二、插入数据
- 三、执行查询
- 1、统计当天迟到的人员名单
- 2、统计当月迟到次数排行前十的人员名单
引言
场景:公司每天要进行打卡上班,每个人每天也可以多次打卡,所有打卡信息会记录到表A 中,表A中有name, date, time 等字段。
a. 统计当天迟到的人员名单,请写出相应的SQL。
b. 统计当月迟到次数排行前十的人员名单,请写出相应的SQL。
一、创建表
/**创建表:A*/
CREATE TABLE A(NAME VARCHAR(50),DATE DATE,TIME TIME);
二、插入数据
/*表A:插入数据*/
INSERT INTO A(NAME,DATE,TIME) VALUES('张小小','2021-02-17','08:50:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('张小小','2021-02-17','09:50:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('张小小','2021-02-17','09:26:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('张小小','2021-02-17','09:12:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('赵晶晶','2021-02-17','09:13:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('赵晶晶','2021-02-17','09:14:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('赵金晶','2021-02-17','09:14:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('郭晓明','2021-02-17','09:12:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('郭晓明','2021-02-17','09:13:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('陈菲菲','2021-02-17','09:14:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('赵晶晶','2021-02-17','09:12:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('赵金晶','2021-02-17','09:13:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('陈小梅','2021-02-17','09:14:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('王小敏','2021-02-17','09:12:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('陈小梅','2021-02-17','09:13:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('童薇薇','2021-02-17','09:14:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('童薇薇','2021-02-17','09:12:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('童芳芳','2021-02-17','09:13:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('张小龙','2021-02-17','09:14:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('张小龙','2021-02-17','09:14:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('张大雷','2021-02-17','09:12:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('陈大雷','2021-02-17','09:13:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('陈大雷','2021-02-17','09:14:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('陈小凤','2021-02-17','09:12:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('李小风','2021-02-17','09:12:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('李西风','2021-02-17','09:13:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('李小风','2021-02-17','09:14:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('陈冬冬','2021-02-17','09:12:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('陈冬冬','2021-02-17','09:12:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('陈东东','2021-02-17','09:13:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('高小明','2021-02-17','09:14:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('高小明','2021-02-17','09:12:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('郭子怡','2021-02-17','09:12:00');
INSERT INTO A(NAME,DATE,TIME) VALUES('高小凤','2021-02-17','09:12:00');
三、执行查询
这里,我们需要指定一个数据基准:
上班时间:9:00,九点之后打卡,均计算为迟到
当前时间:2021-02-17为例进行统计
1、统计当天迟到的人员名单
这个问题呢,需要注意一个点就好了,即:员工多次打卡以后怎么计算迟到次数就好了。实际上呢,排除掉九点(含九点)之前进行打卡的对象就好了!
SELECT NAME,COUNT(*) AS COUNT FROM A
GROUP BY NAME
HAVING NAME NOT IN(
/*排除当天:九点(含九点)前打卡,未迟到的人员*/
SELECT NAME FROM A WHERE TIME<='9:00' AND DATE='2021-02-17'
)
ORDER BY COUNT DESC
2、统计当月迟到次数排行前十的人员名单
这个问题其实也很简单,在我之前编写的过程中,并未考虑到多次打卡的情况,且Group By对象也有问题,修正后的版本如下:
/*统计所有迟到的员工*/
SELECT NAME,COUNT(*) AS COUNT FROM A
GROUP BY NAME
HAVING NAME NOT IN(
/*排除:九点(含九点)前打卡,未迟到的员工*/
SELECT DISTINCT(NAME) FROM A WHERE TIME<='9:00' AND NAME IN(
/*统计当前月(假定:2021-02月)迟到员工*/
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))
/*前10逆序排序*/
ORDER BY COUNT DESC
LIMIT 10
SQL语句统计排行前10相关推荐
- SQL语句统计每天、每月、每年的数据
SQL语句统计每天.每月.每年的数据 1.每年 select year(ordertime) 年, sum(Total) 销售合计 from 订单表 group by year(ordertime) ...
- 数据库专题——SQL语句统计每天、每月、每年的数据
SQL语句统计每天.每月.每年的数据 1.每年 select year(ordertime) 年, sum(Total) 销售合计 from 订单表 group by year(orderti ...
- SQL语句统计每天、每月、每年的销售总额
每年 SQL语句统计每天.每月.每年的销售总额 每月 SQL语句统计每天.每月.每年的销售总额 每日 SQL语句统计每天.每月.每年的销售总额 总结 SQL语句统计每天.每月.每年的销售总额 SQL语 ...
- sql语句统计最近七天,30天的数据, 统计当天数据总和,统计当天每小时的数据,今日金额的支出
sql语句统计最近七天的数据 SELECTdate_format( a.date, '%c.%d' ) times,b.count AS totals FROM( SELECTcurdate( ) A ...
- SQL语句统计每天、每月、每年的 数据
1.每年 select year(ordertime) 年, sum(Total) 销售合计 from 订单表 group by year(ordertime) 2.每月 select year(or ...
- sql语句ding_收集SQL语句统计每天、每月、每年的数据
1.每年 select year(ordertime) as year,count(*) as count from 订单表 group by year(ordertime) 2.每月 select ...
- SQL语句统计错误率
2018年的第一篇博客就以此作为开端吧 :D 最近在项目中碰到需要统计类似错误率之类的需求,原本这功能是之前做的,但是最近测的时候发现出了点问题,显示的结果不对.这就比较尴尬了... 于是就进行deb ...
- Java 程序员排行前 10 的错误,你有没有中?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 风一样的码农 来源| cnblogs.com/ ...
- mysql的条件求和函数_使用SQL语句统计数据时sum和count函数中使用if判断条件的讲解...
首先举个栗子(不想看的话直接下面看总结): order_type:订单类型 open_id:用户唯一标识 SELECT date(create_time) AS '当天日期', sum(real_pr ...
最新文章
- fragment中文网_更新 · React Native 中文网
- 快速构建Windows 8风格应用32-构建辅助磁贴
- MySQL的binarylog处理
- Linux Shell 脚本限制ssh最大用户登录数
- leetcode刷题实录:3
- Currency determination callback
- SAP透明工厂和弹性制造的原型mockup - SAP 工业 4.0 的一个尝试
- Android开发之可以在临界点左右滑动的ViewPager
- 研究生就业竞争力弱化 “皇帝女儿也愁嫁”
- java 如何秒速写一个线程启动
- Python验证和可视化冰雹猜想、角谷猜想、考拉兹猜想
- cnocr:用来做中文OCR的Python3包,装上就能用!
- Scala类型系统(sudden thought)
- 程序员,如何在工作之外,增加自己的收入?
- CAUSALITY FOR MACHINE LEARNING
- 小伙用C++搞定远程桌面监控系统,轻松拿下12家offer!
- 解决QQ远程控制,调用系统应用卡死问题的解决方法的
- BUUCTF [0CTF 2016] piapiapia
- XYplorer 23多语言,最好的管理软件之一
- python+flask+html/css+mysql+BAE 打造CSDN简历自动生成系统(附网站完全源码)