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语法结构详解

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐