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相关推荐

  1. SQL语句统计每天、每月、每年的数据

    SQL语句统计每天.每月.每年的数据 1.每年 select year(ordertime) 年, sum(Total) 销售合计 from 订单表 group by year(ordertime) ...

  2. 数据库专题——SQL语句统计每天、每月、每年的数据

    SQL语句统计每天.每月.每年的数据 1.每年 select year(ordertime) 年, sum(Total) 销售合计   from 订单表   group by year(orderti ...

  3. SQL语句统计每天、每月、每年的销售总额

    每年 SQL语句统计每天.每月.每年的销售总额 每月 SQL语句统计每天.每月.每年的销售总额 每日 SQL语句统计每天.每月.每年的销售总额 总结 SQL语句统计每天.每月.每年的销售总额 SQL语 ...

  4. sql语句统计最近七天,30天的数据, 统计当天数据总和,统计当天每小时的数据,今日金额的支出

    sql语句统计最近七天的数据 SELECTdate_format( a.date, '%c.%d' ) times,b.count AS totals FROM( SELECTcurdate( ) A ...

  5. SQL语句统计每天、每月、每年的 数据

    1.每年 select year(ordertime) 年, sum(Total) 销售合计 from 订单表 group by year(ordertime) 2.每月 select year(or ...

  6. sql语句ding_收集SQL语句统计每天、每月、每年的数据

    1.每年 select year(ordertime) as year,count(*) as count from 订单表 group by year(ordertime) 2.每月 select  ...

  7. SQL语句统计错误率

    2018年的第一篇博客就以此作为开端吧 :D 最近在项目中碰到需要统计类似错误率之类的需求,原本这功能是之前做的,但是最近测的时候发现出了点问题,显示的结果不对.这就比较尴尬了... 于是就进行deb ...

  8. Java 程序员排行前 10 的错误,你有没有中?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 风一样的码农 来源| cnblogs.com/ ...

  9. mysql的条件求和函数_使用SQL语句统计数据时sum和count函数中使用if判断条件的讲解...

    首先举个栗子(不想看的话直接下面看总结): order_type:订单类型 open_id:用户唯一标识 SELECT date(create_time) AS '当天日期', sum(real_pr ...

最新文章

  1. fragment中文网_更新 · React Native 中文网
  2. 快速构建Windows 8风格应用32-构建辅助磁贴
  3. MySQL的binarylog处理
  4. Linux Shell 脚本限制ssh最大用户登录数
  5. leetcode刷题实录:3
  6. Currency determination callback
  7. SAP透明工厂和弹性制造的原型mockup - SAP 工业 4.0 的一个尝试
  8. Android开发之可以在临界点左右滑动的ViewPager
  9. 研究生就业竞争力弱化 “皇帝女儿也愁嫁”
  10. java 如何秒速写一个线程启动
  11. Python验证和可视化冰雹猜想、角谷猜想、考拉兹猜想
  12. cnocr:用来做中文OCR的Python3包,装上就能用!
  13. Scala类型系统(sudden thought)
  14. 程序员,如何在工作之外,增加自己的收入?
  15. CAUSALITY FOR MACHINE LEARNING
  16. 小伙用C++搞定远程桌面监控系统,轻松拿下12家offer!
  17. 解决QQ远程控制,调用系统应用卡死问题的解决方法的
  18. BUUCTF [0CTF 2016] piapiapia
  19. XYplorer 23多语言,最好的管理软件之一
  20. python+flask+html/css+mysql+BAE 打造CSDN简历自动生成系统(附网站完全源码)

热门文章

  1. Android Data Binding 入门
  2. 元旦倒计时(JS计时器)
  3. java p12 ssl_java读取双向证书(p12)证书向微信发送请求
  4. 晨曦记账本收支图表的查看方式
  5. 圣诞主题精致PPT模板
  6. 关于 CouchDB 的一些知识
  7. 日付データ/文字列データの変換(TO_DATE、TO_CHAR、TO_TIMESTAMP)
  8. 云来了,四维图新变了
  9. 一个策划总监的自白:到底什么是策划?
  10. 一般公司网站的制作流程