当前位置: 首页 > news >正文

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

http://www.lryc.cn/news/399090.html

相关文章:

  • PlantUML 教程:绘制时序图
  • 自定义ViewGroup-流式布局FlowLayout(重点:测量和布局)
  • C++的入门基础(二)
  • 显示产业如何突破芯片短板
  • STM32HAL库+ESP8266+cJSON+微信小程序_连接华为云物联网平台
  • debian或Ubuntu中开启ssh允许root远程ssh登录的方法
  • C++《日期》实现
  • 【面试题】MySQL(第三篇)
  • tensorflow之欠拟合与过拟合,正则化缓解
  • vue实现a-model弹窗拖拽移动
  • 速盾:如何加强网站的安全性
  • 【PyTorch单点知识】自动求导机制的原理与实践
  • 【Java】搜索引擎设计:信息搜索怎么避免大海捞针?
  • 【Python】ModuleNotFoundError: No module named ‘distutils.util‘ bug fix
  • 痉挛性斜颈对生活有哪些影响?
  • Javassist 修改 jar 包里的 class 文件
  • 交换机的二三层原理
  • HarmonyOS ArkUi 字符串<展开/收起>功能
  • Lianwei 安全周报|2024.07.09
  • 火遍全网的15个Python的实战项目,你该不会还不知道怎么用吧!
  • 快速使用BRTR公式出具的大模型Prompt提示语
  • Xilinx FPGA DDR4 接口的 PCB 准则
  • 神经网络 | Transformer 基本原理
  • 浅析 VO、DTO、DO、PO 的概念
  • 7.8 CompletableFuture
  • iPad锁屏密码忘记怎么办?有什么方法可以解锁?
  • 了解并缓解 IP 欺骗攻击
  • java LogUtil输出日志打日志的class文件内具体方法和行号
  • 02. Hibernate 初体验之持久化对象
  • MySQL超详细学习教程,2023年硬核学习路线