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.mzph.cn/bicheng/45459.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【D3.js in Action 3 精译】1.3 D3 视角下的数据可视化最佳实践(下)

当前内容所在位置 第一部分 D3.js 基础知识 第一章 D3.js 简介 ✔️ 1.1 何为 D3.js?1.2 D3 生态系统——入门须知 1.2.1 HTML 与 DOM1.2.2 SVG - 可缩放矢量图形1.2.3 Canvas 与 WebGL1.2.4 CSS1.2.5 JavaScript1.2.6 Node 与 JavaScript 框架1.2.7 Observable 记事…

我的世界1.21多种服务端开服教程,原版/Forge/Fabric/Paper/Mohist...,Minecraft开服教程

Minecraft(MC)1.21版多种服务端开服教程,我的世界1.21服务器搭建教程,MC原版/Forge/Fabric/Paper/Mohist服务端搭建教程,我的世界MOD/插件服开服教程。 本教程使用 Linux系统MCSManager 面板来搭建Minecraft服务器。 …

人工智能行业应用-垃圾识别一

垃圾识别应用主要体现在AI图像垃圾识别技术上,这是一种基于人工智能和计算机视觉技术的图像处理技术,广泛应用于各个领域以提高垃圾处理的效率和准确性。 1、垃圾识别效果图 2 垃圾识别任务分析 综合利用Python语言、Qt开发模块,OpenCV开发模…

数据结构(Java):单链表面试OJ题

1、题一:获取链表倒数第k个节点 . - 力扣(LeetCode) 1.1 思路解析 此题我们使用双指针法求解。 首先,我们要知道,倒数的第k个节点,距离倒数第一个节点还需要移动k-1次。 1.那么我们可以定义出两个指针&a…

SQL去重的四种方法

去重是指:查询的时候, 不显示重复,并不是删除表中的重复项 数据表: 方法1:distinct去重 作用:只能一列去重,当distinct后跟大于1个参数时,他们之间的关系是&&(逻辑与)关系,…

00 Debian字符界面如何支持中文

作者:网络傅老师 特别提示:未经作者允许,不得转载任何内容。违者必究! Debian字符界面如何支持中文 《傅老师Debian知识库系列之00》——原创 前言 傅老师Debian知识库特点: 1、拆解Debian实用技能; 2、…

ArcGIS获取21天免费教程,不用自己的邮箱

因为迟迟等不到3.1学习版本,但又很眼馋3.1的功能。 在群友的提醒下,官网免费注册21天试用,注册一次可以用21天,基本全部功能都可以使用。 (也有群里的人用PayPal支付,然后设置离线许可,官网退…

Sentinel 学习笔记

Sentinel 学习笔记 作者:王珂 邮箱:49186456qq.com 文章目录 Sentinel 学习笔记[TOC] 前言一、基础概念二、Sentinel控制台2.1 安装控制台2.2 簇点链路2.3 请求限流2.4 线程隔离2.5 服务降级2.6 服务熔断 三、Sentinel客户端3.1 原始Jar包客户端3.2 Sp…

216.Mit6.S081-实验四-Traps

本实验探索如何使用陷阱实现系统调用。您将首先使用栈做一个热身练习,然后实现一个用户级陷阱处理的示例。 开始编码之前,请阅读xv6手册的第4章和相关源文件: kernel/trampoline.S:涉及从用户空间到内核空间再到内核空间的转换的…

【多线程】单例模式

🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. 单例模式的初识2. 单例模式的含义3. 单例模式实现的两种方式3.1 饿汉模式3.2 懒汉模式3.2.1 懒汉模式(单线…

Redis的缓存雪崩,击穿,穿透的介绍

1.缓存雪崩 为保证缓存中的数据与数据库的数据一致,会给Redis里的数据设置一个过期时间,当缓存数据过期后,用户访问的数据如果不在缓存里,业务系统需要重新生成新的缓存,因为就会访问数据库,并将数据更新到Redis里,这样后续请求就可以直接命中缓存. 当大量缓存在同一时间过期或…

Nginx和Tomcat实现负载均衡群集部署应用

🏡作者主页:点击! 🐧Linux基础知识(初学):点击! 🐧Linux高级管理专栏:点击! 🔐Linux中firewalld防火墙:点击! ⏰️创作时间&…

减少CMOS模拟开关导通电阻引起的失真

1 简介 许多数据采集系统的在多通道间选择时需要使用模拟开关,相比同类的机械开关,半导体开关锁表现出的工作特性是迥然不同的。如:处在闭合位置的CMOS开关的电阻(导通电阻 “Ron”)会因输入电压的不同而改变。该特性通…

IMU的加速度补偿、祛除向心力

目录 1. 简介2. 仅有XY偏移的修正过程3. 3D修正过程 1. 简介 一般,我们期望用IMU测量某个Target坐标系的加速度、角速度信息,然而IMU的坐标系与Target 坐标系一般存在位姿关系,此时IMU测量的加速度不能直接代表Target左坐标系的加速度。比如…

python库(10):SpaCy库实现NLP处理

1 SpaCy简介 自然语言处理(NLP)是人工智能领域中一个重要的分支。它旨在使计算机能够理解、解释和生成人类语言。Python中的SpaCy库提供了丰富的功能和工具,SpaCy是一个开源的软件库,用于处理和操作自然语言文本,可以…

BM42:混合搜索的新基准 - Qdrant

在过去的 40 年里,BM25 一直是搜索引擎的标准。它是一种简单但功能强大的算法,已被许多搜索引擎使用,包括 Google、Bing 和 Yahoo。 虽然看起来向量搜索的出现会削弱其影响力,但效果并不明显。目前最先进的检索方法试图将 BM25 与…

python库(11):Box库简化字典和对象之间的转换

1Box库简介 Box是一个Python库,它提供了一种将数据封装在字典和列表中的方式,同时提供了一些额外的功能,比如数据验证、默认值设置等。这使得Box库非常适合用于配置管理、数据传输对象(DTO)的创建,以及任何…

sqlmap使用之-post注入、head注入(ua、cookie、referer)

1、post注入 1.1、方法一,通过保存数据包文件进行注入 bp抓包获取post数据 将数据保存到post.txt文件 加上-r指定数据文件 1.2、方法二、通过URL注入 D:\Python3.8.6\SQLmap>python sqlmap.py -u "http://localhost/login.php" --data "userna…

替换:show-overflow-tooltip=“true“ ,使用插槽tooltip,达到内容可复制

原生的show-overflow-tooltip“true” 不能满足条件&#xff0c;使用插槽自定义编辑&#xff1b; 旧code <el-table-column prop"reason" label"原因" align"center" :show-overflow-tooltip"true" /> <el-table-column pro…

压缩文件的解析方式

Java中我们用ZipInputStream和ZipOutputStream来完成对zip文件和rar文件的读写 I /O流&#xff1a; Input:输入&#xff0c;通过“输入流”进行文件的读取操作 output:输出&#xff0c;通过“输出流”进行文件的写入操作 一、将压缩包解压缩 1.解压缩.zip格式文件&#xf…