MySql014——分组的GROUP BY子句排序ORDER BYSELECT子句顺序

前提:使用《MySql006——检索数据:基础select语句(使用products表、查询单列、多列、所有列、DISTINCT去除重复行、LIMIT限制返回结果的行数、了解完全限定)》中创建的products表
在这里插入图片描述

一、GROUP BY子句基础用法

SELECT vend_id, COUNT(*) AS num_prods
FROMstudy.products
GROUP BY vend_id;

上面的SELECT语句指定了两个列,vend_id包含产品供应商的ID,num_prods为计算字段(用COUNT(*)函数建立)。GROUP BY子句指
示MySQL按vend_id排序并分组数据。这导致对每个vend_id而不是整个表计算num_prods一次。从输出中可以看到,供应商1001有3个产品,供应商1002有2个产品,供应商1003有7个产品,而供应商1005有3个产品。
在这里插入图片描述

注意:GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前。

二、过滤分组

2.1、准备工作:在study库中创建表orders(订单表),并插入数据

#####################
# Create orders table
#####################
use `study`;CREATE TABLE orders
(order_num  int      NOT NULL AUTO_INCREMENT,order_date datetime NOT NULL ,cust_id    int      NOT NULL ,PRIMARY KEY (order_num)
) ENGINE=InnoDB;#######################
# Populate orders table
#######################
INSERT INTO orders(order_num, order_date, cust_id)
VALUES(20005, '2005-09-01', 10001);
INSERT INTO orders(order_num, order_date, cust_id)
VALUES(20006, '2005-09-12', 10003);
INSERT INTO orders(order_num, order_date, cust_id)
VALUES(20007, '2005-09-30', 10004);
INSERT INTO orders(order_num, order_date, cust_id)
VALUES(20008, '2005-10-03', 10005);
INSERT INTO orders(order_num, order_date, cust_id)
VALUES(20009, '2005-10-08', 10001);

在这里插入图片描述

2.2、例子1:想要列出至少有两个订单的所有顾客。

SELECT cust_id, COUNT(*) AS orders
FROMstudy.orders
GROUP BY cust_id	-- 使用GROUP BY,根据cust_id将相同顾客信息,分成一组
HAVING COUNT(*) >= 2;	-- 使用HAVING和COUNT()选出订单数大于等于2 的顾客信息

在这里插入图片描述

2.3、例子2,它列出具有2个及以上、价格为10及以上的产品的供应商

SELECT vend_id, COUNT(*) AS num_prods
FROMstudy.products
WHEREprod_price >= 10  -- 价格要大于等于10
GROUP BY vend_id 	-- 根据vend_id分组
HAVING COUNT(*) >= 2	-- 只选择分组中数据大于等于2条的# 即:根据vend_id分组,只选择分组中数据大于等于2条,且价格大于等于10的数据

在这里插入图片描述

三、分组GROUP BY和排序ORDER BY区别

3.1、准备工作:在study库中创建表orderitems(订单详细表),并插入数据

#########################
# Create orderitems table
#########################
CREATE TABLE orderitems
(order_num  int          NOT NULL ,order_item int          NOT NULL ,prod_id    char(10)     NOT NULL ,quantity   int          NOT NULL ,item_price decimal(8,2) NOT NULL ,PRIMARY KEY (order_num, order_item)
) ENGINE=InnoDB;###########################
# Populate orderitems table
###########################
INSERT INTO orderitems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20005, 1, 'ANV01', 10, 5.99);
INSERT INTO orderitems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20005, 2, 'ANV02', 3, 9.99);
INSERT INTO orderitems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20005, 3, 'TNT2', 5, 10);
INSERT INTO orderitems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20005, 4, 'FB', 1, 10);
INSERT INTO orderitems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20006, 1, 'JP2000', 1, 55);
INSERT INTO orderitems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20007, 1, 'TNT2', 100, 10);
INSERT INTO orderitems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20008, 1, 'FC', 50, 2.50);
INSERT INTO orderitems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20009, 1, 'FB', 1, 10);
INSERT INTO orderitems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20009, 2, 'OL1', 1, 8.99);
INSERT INTO orderitems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20009, 3, 'SLING', 1, 4.49);
INSERT INTO orderitems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20009, 4, 'ANV03', 1, 14.99);

在这里插入图片描述
直接上例子

3.2、例子

它检索总计订单价格大于等于50的订单的订单号和总计订单价格,并按总计订单价格排序输出。

SELECT ORDER_NUM, SUM(quantity * item_price) AS ordertotal
FROMstudy.orderitems
GROUP BY order_num
HAVING SUM(quantity * item_price) >= 50
ORDER BY ordertotal;

在这个例子中,GROUP BY子句用来按订单号(order_num列)分组数据,以便SUM(*)函数能够返回总计订单价格。HAVING子句过滤数据,使得只返回总计订单价格大于等于50的订单。最后,用ORDER BY子句排序输出。
在这里插入图片描述

四、SELECT子句顺序

下面回顾一下SELECT语句中子句的顺序

=================================================================
子 句 			说 明 					是否必须使用
=================================================================
SELECT 			要返回的列或表达式 			是
FROM 			从中检索数据的表 			仅在从表选择数据时使用
WHERE 			行级过滤 					否
GROUP BY 		分组说明 				仅在按组计算聚集时使用
HAVING 			组级过滤 					否
ORDER BY 		输出排序顺序 					否
LIMIT 			要检索的行数 					否
=================================================================

与君共享

👉👉👉👉👉最后,有兴趣的小伙伴可以点击下面链接,这里有我整理的MySQL学习博客内容,谢谢~ 🌹🌹🌹🌹🌹

《MySQL数据库学习》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1619180.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

一篇掌握BFD技术(三):单臂回声配置

1. 实验目的 熟悉单臂回声的应用场景掌握单臂回声的配置方法 2. 实验拓扑 想要华为数通配套实验拓扑和配置笔记的朋友们点赞关注&#xff0c;评论区留下邮箱发给你 3. 实验步骤 1&#xff09;配置IP地址 AR1的配置 <Huawei>system-v…

学习率调整策略

学习率是可以控制更新的步伐的。 我们在训练模型的时候&#xff0c;一般开始的时候学习率会比较大&#xff0c;这样可以以一个比较快的速度到达最优点的附近&#xff0c;然后再把学习率降下来&#xff0c; 缓慢的去收敛到最优值。学习率前期要大&#xff0c;后期要小 在学习学…

6种实用的绩效评估方法

种实用的绩效评估方法" 员工绩效考核 员工绩效评估流程对于组织提高员工生产力和改善他们的成果至关重要。绩效评估是一个年度过程&#xff0c;在该过程中&#xff0c;根据一组预先确定的目标评估员工的绩效和生产力。 绩效管理非常重要&#xff0c;不仅因为它是员工加…

分类问题的 8 种评估方法(全)

对于地震的预测&#xff0c;我们希望能够对所有要发生的地震都预测到&#xff0c;即使预测有地震了但是没有发生也能接受&#xff0c;但是不能接受预测没有地震却发生地震的情况。 再比如&#xff0c;对于犯罪嫌疑人的定罪&#xff0c;我们不能本着宁可错杀也不放过的原则把好人…

软件测试(白盒测试入门之gtest测试)

一、gtest是什么 gtest全程为GoogleTest&#xff0c;是一个跨平台的(Liunx、Mac OS X、Windows、Cygwin、Windows CE and Symbian)C单元测试框架&#xff0c;由google公司发布。 如何去下载&#xff0c;调用&#xff0c;这个可以去找下相关教程&#xff0c;还需要先学下cmake…

华熙旭辉强强联手 升级京城文体地标 共绘文体商业版图

2月5日&#xff0c;华熙国际投资集团与旭辉集团在北京华熙LIVE中心签署战略合作框架协议&#xff0c;双方将共同对京城知名文体商业地标“华熙LIVE五棵松”进行开发运营&#xff0c;为项目注入新的活力&#xff0c;未来更有望在更多城市强强联手打造文体商业地标&#xff0c;让…

Java:使用HttpURLConnection发送请求时报文体为什么会为空?

最近使用java.net.HttpURLConnection做一些简单的测试程序&#xff0c;发现发送的报文体为空&#xff1a; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL;public class Htt…

计算机英语文体特点,公共英语五级写作文体特点分析

公共英语五级写作文体特点分析 大家要掌握一些常见文体的写作方法和技巧。文章的常见文体有描写文(Description)、记叙文(Narration)、说明文 (Exposition)、议论文(Argumentation)、及应用文(Pratical Writing)等。各文体往往交叉使用&#xff0c;互相渗透。下面小编大家介绍公…

深入URP之Shader篇14: GPU Instancing

GPU Instancing 必须是同一个模型&#xff0c;材质也必须相同&#xff0c;但材质的参数可以不同&#xff08;使用MaterialPropertyBlock指定&#xff09;&#xff0c;然后基于一个Instanced Draw Call&#xff0c;一次性绘制多个模型。 参考&#xff1a;https://docs.unity3d.…

9.3 功率放大电路的安全运行

在功率放大电路中&#xff0c;功放管既要流过大电流&#xff0c;又要承受高电压。例如&#xff0c;在 OCL 电路中&#xff0c;只有功放管满足式&#xff08;9.2.13&#xff09;所示极限值的要求&#xff0c;电路才能正常工作。因此&#xff0c;所谓功率放大电路的安全运行&…

八年终有一别

告别文章&#xff0c;本文应该所有的名字都会真名&#xff0c;我不知道侵犯权益什么的&#xff0c;希望不要冒犯到。 NOIp2018 提高组游记 ZJOI2019上海游族杯acm游记 绍兴一中集训记 NOI2019同步赛 day1 NOI2019同步赛 day2 绍兴一中暑假集训总结 慈溪中学集训记 CSP-S2019游…

怎么用Linux下载链接,在linux系统里,下载的迅雷专用链接!

wtf1981 于 2009-06-03 21:18:08发表: 事实看看 you_me 于 2009-05-20 19:34:17发表: 试试看吧 563909373 于 2009-05-20 19:11:23发表: 学习一下&#xff01; kuiying 于 2009-05-17 21:39:25发表: 好阿 支持一下&#xff01;&#xff01;&#xff01;&#xff01;&#xff01…

如何减小迅雷下载对网络的影响

导言 很多用户都喜欢用迅雷进行各种资源的下载&#xff0c;因为迅雷通过镜像搜索可以同时从多个高速站点进行下载&#xff0c;从而达到满速下载的目的。但是&#xff0c;对于企业主/网管人员来说&#xff0c;高速下载的迅雷会占用有限的网络资源&#xff0c;在自己享受高速度的…

大规模 C++ 编译性能优化系统 OMAX 介绍

导读&#xff1a;本文探索&研究了大规模C/C服务编译性能优化相关技术&#xff0c;优化服务性能&#xff0c;降低机器成本&#xff0c;同时为了支持规模推广应用&#xff0c;降低业务线接入成本&#xff0c;保障优化效果&#xff0c;进行面向云上微服务&#xff0c;开展平台…

如何使用缓存优化系统性能?

缓存是我们提高系统性能的一项必不可少的技术&#xff0c;无论是前端、还是后端&#xff0c;都应用到了缓存 技术。前端使用缓存&#xff0c;可以降低多次请求服务的压力&#xff1b;后端使用缓存&#xff0c;可以降低数据库操作 的压力&#xff0c;提升读取数据的性能。 今…

关键词优化系统|智能优化「白狐公羊seo」

1.SEO的设置 。要进行SEO网站优化的前提&#xff0c;先设置TDK&#xff0c;三个重要的参数:title、keywords、description。因为TDK是一个网站优化的核心要素和重要标志。后期的优化都是围绕着TDK来进行的。设置TDK是对 网站优化排名 提升的其中一个方法。 2. 内容标题优化…

windows10 优化系统性能

以下仅供参考&#xff1a; 1、设置中 2、 设置中》搜索【启动应用】&#xff0c;关闭启动机器自动启动的应用 或者在任务管理器中 3、回收站 右键【属性】》一般设置为10G到15G之间 4、电源计划中设置高性能 考虑到个人健康 power shell命令中&#xff1a; 然后【更改计划】…

大规模C++编译性能优化系统OMAX介绍

导读&#xff1a;本文探索&研究了大规模C/C服务编译性能优化相关技术&#xff0c;优化服务性能&#xff0c;降低机器成本&#xff0c;同时为了支持规模推广应用&#xff0c;降低业务线接入成本&#xff0c;保障优化效果&#xff0c;进行面向云上微服务&#xff0c;开展平台…

系统优化方案

亲爱的用户&#xff0c;当您觉得计算机速度过慢&#xff0c;或者您想清理系统垃圾的话&#xff0c;您只需按照以下步骤操作即可哦(&#xff3e;&#xff35;&#xff3e;)ノ~&#xff39;&#xff2f; 一、手动清除系统盘的缓存文件&#xff1a; 打开桌面【此电脑】图标&#x…

如何进行系统性能优化

前言 不战而屈人之兵&#xff0c;善之善者也 性能优化的第一原则是&#xff0c;通过测试&#xff0c;日志&#xff0c;profiling 分析出哪有问题&#xff0c;然后有的放失。 性能优化时持久战&#xff0c;在深入理解业务后&#xff0c;结合系统响应&#xff0c;系统吞吐&#…