【瞎老弟mysql】09-数据的分组

前情回顾

之前,我们已经学习了聚合函数,可以通过聚合函数,进行一些我们希望的计算和统计,比如说,我们可以统计出总共有多少条数据,但是这样的功能显然还不够。

试设想这样一个场景,小区通过数据库记录了每天的进出的人员名单,如果,我们希望分别统计出每天到底有多少人进出,那么,如果按照之前学习的方法,只使用聚合函数和where,一点点进行统计的话,显然是不能让人满意的。因此,我们可以通过分组的功能,一次完成。

首先,我们创建这样的一个数据表。

create table Access(
    id int not null auto_increment,
    name varchar(50) not null,
    status enum('进入', '外出'),
    time date not null,
    primary key(id)
)

按照惯例,我们为这个数据表,插入一些数据

insert into Access values
    (0, '小王', '进入', '2021-12-10'),
    (0, '小张', '进入', '2021-12-10'),
    (0, '老李', '外出', '2021-12-10'),
    (0, '小王', '外出', '2021-12-10'),
    (0, '小花', '进入', '2021-12-11'),
    (0, '小王', '进入', '2021-12-11'),
    (0, '小张', '外出', '2021-12-11'),
    (0, '小白', '外出', '2021-12-11'),
    (0, '老关', '进入', '2021-12-11'),
    (0, '小花', '外出', '2021-12-12'),
    (0, '小王', '进入', '2021-12-13'),
    (0, '老关', '外出', '2021-12-13'),
    (0, '小蒋', '外出', '2021-12-13'),
    (0, '大姜', '进入', '2021-12-13'),
    (0, '小花', '进入', '2021-12-14');

使用group by分组查询

select <列1>, <列2>...

        from <表名>

        group by <列1>, <列2>...;

按照这个规则,比如,我们想要统计每天都有多少人进出,只需要这样做

select time as 时间, count(*) as 人数
    from Access
    group by time;

或者,我们想要统计每天分别有多少人进出,可以这样做

select time as 时间, status as 方向, count(*) as 人数
    from Access
    group by time, status;

如果想要统计这段时间,每个人,总共有多少条进出记录,可以这样做

select name as 姓名, count(*) as 次数
    from Access
    group by name;

group by与where配合使用

如果,要将group by与where配合使用,那么一定要将where写在group by的前边。如果把where写在group by的后边,这样做在语法上是不正确的。

select <列1>, <列2>...

        from <表名>

        where <条件>

        group by <列1>, <列2>...;

比如说,我们可以尝试查询,2021年12月13日以前,每天进来的人数,那么可以这样做

select time as 时间, count(*) as 人数
    from Access
    where time < '2021-12-13'
    group by time;

点击查看瞎老弟mysql系列全部文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值