SQL 分组查询 -简述及举例

简介: SQL 分组查询 -简述及举例

SQL 分组查询 -简述及举例

1、标准书写样式 (只能按照循序写)

SELECT

   ....

FROM

   ....

WHERE  (条件)

   ....

GROUP BY  (分组)

   ....


HAVING  (筛选)


   ....


ORDER BY  (排序)

   ....


2、sql执行循序

①、FROM


②、WHERE


③、GROUP BY


④、HAVING


⑤、SELECT


⑥、ORDER BY


3、注意事项:

sql语句中能用WHERE或者HAVING都能达到结果的,要用尽量WHERE;

在使用链接表时能用JOIN链接要用JOIN链接

HAVING 必须跟在分组函数后

--例子
--1、查询班级下的年龄大于20岁的学生
-- -- sql语句中能用WHERE或者HAVING都能达到结果的,要用尽量WHERE;
SELECT * FROM `user` WHERE age>20 GROUP BY classid
SELECT * FROM `user`  GROUP BY classid  HAVING age>20
--2、查询年级中大于最小年级的学生
SELECT * FROM `user` u1 WHERE u1.age > (SELECT MIN(u2.age) FROM `user` u2)
SELECT *FROM `user` u1 JOIN (SELECT MIN(nu.age) nage FROM `user` nu) u2 ON u1.age> u2.nage

4、例子

-- 查询每个班级下的平均年龄大于20岁的学生,并且班级不是3,倒叙排序
SELECT
  classid,
  AVG( age ) 
FROM
  `user` 
WHERE
  classid != 3 
GROUP BY
  classid 
HAVING
  AVG( age ) > 20 
ORDER BY
  age DESC

建表语句:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '名字',
  `age` int(3) NULL DEFAULT NULL COMMENT '年龄',
  `grade` double(5, 2) NULL DEFAULT NULL COMMENT '分数',
  `classid` int(11) NULL DEFAULT NULL COMMENT '班级id',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 11CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, '张三', 35, 24.00, 3);
INSERT INTO `user` VALUES (3, '赵六', 23, 23.82, 2);
INSERT INTO `user` VALUES (5, '李小', 34, 23.16, 3);
INSERT INTO `user` VALUES (6, '赵四', 45, 34.00, 2);
INSERT INTO `user` VALUES (7, '小红', 12, 23.98, 1);
INSERT INTO `user` VALUES (8, '赵六', 23, 99.90, 2);
INSERT INTO `user` VALUES (9, 'DAXIE', 32, 34.00, 2);
INSERT INTO `user` VALUES (10, 'xiaoxie', 67, 89.00, 3);
SET FOREIGN_KEY_CHECKS = 1;
目录
相关文章
|
13天前
|
XML SQL 数据格式
XML动态sql查询当前时间之前的信息报错
XML动态sql查询当前时间之前的信息报错
34 2
|
21天前
|
SQL JSON 数据库
influxdb 端点使用http进行sql查询,写数据
influxdb 端点使用http进行sql查询,写数据
59 0
|
5天前
|
SQL Java 数据库连接
JDBC连接SQL Server2008 完成增加、删除、查询、修改等基本信息基本格式及示例代码
这篇文章提供了使用JDBC连接SQL Server 2008数据库进行增加、删除、查询和修改操作的基本步骤和示例代码。
|
6天前
|
SQL 存储 分布式计算
|
12天前
|
SQL 存储 关系型数据库
SQL字符串查询有哪些坑?
本文通过创建一个包含不同格式姓名数据的表格,探讨了MySQL中字符排序规则(Collation)的影响。通过使用不区分大小写和空格的查询条件,文章演示了如何获取所有插入的记录,并解释了排序规则中"_ci"、"_cs"及"_bin"的区别。此外,还强调了在数据处理过程中,应考虑大小写敏感性和字符串前后空格的问题,以防导致统计或比较上的错误。最后,提供了Go语言中处理这类问题的方法,如使用`strings.EqualFold()`进行不区分大小写的字符串比较,以及使用`strings.TrimSpace()`去除字符串两端的空白字符。
|
18天前
|
SQL 安全 数据库
如何优化SQL查询
【8月更文挑战第1天】如何优化SQL查询
24 2
|
18天前
|
SQL 缓存 关系型数据库
SQL如何优化查询?
【8月更文挑战第1天】SQL如何优化查询?
27 1
|
21天前
|
SQL 存储 API
ES 实战复杂sql查询、修改字段类型
ES 实战复杂sql查询、修改字段类型
30 1
|
1天前
|
SQL 数据库
实时数仓 Hologres产品使用合集之如何找回之前的SQL查询代码
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
|
1天前
|
SQL 数据库 UED
SQL查询功能的全面解析与实用技巧
SQL(Structured Query Language)作为数据库管理的核心语言,其查询功能是实现数据检索、分析和报告的关键