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;

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夢鑰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值