【MySQL】 GROUP BY 多个字段的用法说明

MySQL中的GROUPBY用于分组查询,单字段GROUPBY按该字段分组,多字段则按组合分组。例如,仅按name分组会忽略性别差异,需结合sex字段,如SELECTSUM(score)ASsum_scoreFROMuserGROUPBYname,sex,以获取更精确的统计结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL GROUP BY 多个字段的用法说明

1. 说明

在 mysql 中使用 group by 的意思是分组查询。如果 group by 后面跟的是单个字段,那么表示按照这个字段分组查询,如果 group by 后面跟的是多个字段,那么表示按照这些字段的不同组合分组查询。

2. 举例

2.1 例子1

在这里插入图片描述
group by 单字段查询语句示例:

select sum(score) as sum_score from user group by name

在这里插入图片描述
根据实际运行结果,我们可以看到,如果在这种情况下使用 group by 单字段 name,最终只会查询出一个周涛,实际上周涛按性别区分有两个人。因此我们就要用到 group by 多字段进行查询了。

group by 多字段查询语句示例:

select sum(score) as sum_score from user group by name,sex

在这里插入图片描述

2.2 例子2

CREATE TABLE `key_technological_achievements` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `golaxy_vocab_id` bigint unsigned NOT NULL COMMENT '全词表 id',
  `name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '重点成果名字',
  `release_time` date DEFAULT NULL COMMENT '发布时间',
  `author_name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '作者名字,半角分号分割',
  `affiliation_name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '参与机构,半角分号分割',
  `citation_count` int unsigned NOT NULL DEFAULT '0' COMMENT '被引用次数',
  `summary` text COLLATE utf8mb4_bin COMMENT '总结',
  `achievement_introduction` text COLLATE utf8mb4_bin COMMENT '成果介绍',
  `key_parameter` text COLLATE utf8mb4_bin COMMENT '关键参数',
  `application_prospect` text COLLATE utf8mb4_bin COMMENT '应用前景',
  `research_team` text COLLATE utf8mb4_bin COMMENT '国内外其他研究团队',
  `original_data` text COLLATE utf8mb4_bin COMMENT '原数据',
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` int DEFAULT '0' COMMENT '1=已删除,0=未删',
  PRIMARY KEY (`id`),
  KEY `_idx_golaxy_vocab_id_` (`golaxy_vocab_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2776 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='技术重点成果表';

要查询同一 golaxy_vocab_id 具有 5 条或以上且 is_deleted = 0 的记录,并且 name 不重复的 golaxy_vocab_id,可以使用以下 SQL:

SELECT golaxy_vocab_id
FROM key_technological_achievements
WHERE is_deleted = 0
GROUP BY golaxy_vocab_id
HAVING COUNT(DISTINCT name) >= 5;

要查询 key_technological_achievements 表中 golaxy_vocab_id 相同且 is_deleted=0 的记录数达到或超过 5 条的 golaxy_vocab_id,可以使用以下 SQL 查询:

SELECT golaxy_vocab_id
FROM key_technological_achievements
WHERE is_deleted = 0
GROUP BY golaxy_vocab_id
HAVING COUNT(*) >= 5;

附录

1.另一个例子
2.MySQL必备技能之group by语法结构详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

boy快快长大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值