group 与查询字段

需求

每周周一,统计菜单在过去一周,点击次数,和点击人数(同一个人访问多次按一次计算)

表及数据

日志表

CREATE TABLE `t_data_log` (

`id` varchar(50) NOT NULL COMMENT '主键id',

`operation_object` varchar(500) DEFAULT NULL COMMENT '操作对象-菜单ID',

`operation_description` varchar(1000) DEFAULT NULL COMMENT '操作描述',

`operation_user` varchar(50) DEFAULT NULL COMMENT '操作用户-用户ID',

`operation_time` datetime DEFAULT NULL COMMENT '操作时间',

PRIMARY KEY (`id`) USING BTREE,

KEY `idx_operation_user` (`operation_user`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='数据日志表';

菜单表

CREATE TABLE `t_menus` (

`id` varchar(50) NOT NULL COMMENT '主键id',

`menu_name` varchar(100) DEFAULT NULL COMMENT '菜单名称',

PRIMARY KEY (`id`) USING BTREE

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='菜单表';

select * from t_menus;

select * from t_data_log;

初始化数据

insert into t_menus values('1','融资模版');

insert into t_menus values('2','融资计划');

insert into t_menus values('3','融资机构');

insert into t_data_log values('1','1','查询','u_001','2024-04-29 17:07:37');

insert into t_data_log values('2','1','查询','u_002','2024-04-29 17:07:37');

insert into t_data_log values('3','2','查询','u_001','2024-04-29 17:07:37');

insert into t_data_log values('4','2','查询','u_002','2024-04-29 17:07:37');

insert into t_data_log values('5','2','查询','u_003','2024-04-29 17:07:37');

查询sql

group by 菜单ID

select m.menu_name ,count(*) count, count(distinct(l.operation_user)) person_count,

count(operation_user) person_count_total from t_menus m join t_data_log l on m.id = l.operation_object

group by m.id;

group by 菜单名称

select m.menu_name ,count(*) count, count(distinct(l.operation_user)) person_count,

count(operation_user) person_count_total from t_menus m join t_data_log l on m.id = l.operation_object

group by m.menu_name;

对比二者区别,分组字段不同,一个菜单ID一个菜单名称,查询结果是菜单名称,其他字段是count,疑问:依据mysql语法规则,查询结果字段必须包含在group 字段中

根据菜单ID分组,结果中是菜单名称,结果是否准确

结论:是准确的

select 字段不在group by的情况

1,聚合函数中字段可以不在group by中

像 sum()、avg()、max()、min()、count()这些聚合函数中的字段可以不在group by中。

2,group by的字段里有主键字段。    

即菜单ID作为分组字段,菜单名称可不在group中

3,如果sql_mode参数中没有ONLY_FULL_GROUP_BY,是允许select字段可以不在group by字段里的也就是说

但是这种只是保证不报错,无法保证结果的准确性

参考:

MySQL中select的字段只能取group by 中的字段吗?_mysql中查询条件只能有group by中字段-CSDN博客

https://www.toutiao.com/article/7044793472104399397/?app=news_article&timestamp=1720742979&use_new_style=1&req_id=2024071208093964E54949A5B564B919C4&group_id=7044793472104399397&wxshare_count=1&tt_from=weixin&utm_source=weixin&utm_medium=toutiao_android&utm_campaign=client_share&share_token=33e30f85-dfa0-4c85-abde-4444d46dd493&source=m_redirect

相关推荐

  1. postgresql 查询字段 信息

    2024-07-13 22:26:02       51 阅读
  2. Mongodb 控制查询返回字段

    2024-07-13 22:26:02       51 阅读
  3. mybatis多字段模糊查询

    2024-07-13 22:26:02       57 阅读
  4. mybatisplus 查询某一字段

    2024-07-13 22:26:02       21 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 22:26:02       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 22:26:02       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 22:26:02       62 阅读
  4. Python语言-面向对象

    2024-07-13 22:26:02       72 阅读

热门阅读

  1. Qt MV架构 数据-窗口映射器

    2024-07-13 22:26:02       24 阅读
  2. 暑假自律日记九

    2024-07-13 22:26:02       21 阅读
  3. 如何在PostgreSQL正确的 使用UUID 作为主键

    2024-07-13 22:26:02       22 阅读
  4. 《NX二次开发官方案例》专栏目录B

    2024-07-13 22:26:02       19 阅读
  5. 并行编程实战——TBB编程流图的问题

    2024-07-13 22:26:02       22 阅读
  6. MySQL零散拾遗

    2024-07-13 22:26:02       25 阅读
  7. 使用 GPT-4 和 ChatGPT 构建应用程序

    2024-07-13 22:26:02       22 阅读