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;