SQL系列2-分组数据

news/发布时间2024/6/17 20:40:36

sql系列2-分组数据✅

```sql
SELECT order_num, COUNT(*) AS items
FROM OrderItems
GROUP BY order_num
HAVING COUNT(*) >= 3
ORDER BY items, order_num;
```

编写 SQL 语句,返回名为 cheapest_item 的字段,该字段包含每个供应商成本最低的产品(使用 Products 表中的 prod_price),然后从最低成本到最高成本对结果进行排序

![image-20230918155508756](https://img2023.cnblogs.com/blog/2724586/202309/2724586-20230918155932317-269206371.png)

在这个例子中,使用 GROUP BY 子句按订单号(order_num 列)分组数据,以便 COUNT(*)函数能够返回每个订单中的物品数目。HAVING 子句过滤数据,使得只返回包含三个或更多物品的订单。最后,用 ORDER BY子句排序输出。

 

```sql
SELECT vend_id, min(prod_price) as cheapest_item FROM products
group by vend_id
order by cheapest_item,vend_id ;
```

![image-20230918092541947](https://img2023.cnblogs.com/blog/2724586/202309/2724586-20230918155931920-1759768457.png)

确定最佳顾客非常重要,请编写 SQL 语句,返回至少含 100 项的所有订单的订单号(OrderItems 表中的 order_num)

```sql
SELECT order_num
FROM OrderItems
GROUP BY order_num
HAVING SUM(quantity) >= 100
ORDER BY order_num;
```

![image-20230918092558909](https://img2023.cnblogs.com/blog/2724586/202309/2724586-20230918155931583-299933533.png)

 

HAVING 子句是用来过滤特定的组的

提示:不要忘记 **ORDER BY**

一般在使用 GROUP BY 子句时,应该也给出 ORDER BY 子句。这是保

证数据正确排序的唯一方法。千万不要仅依赖 GROUP BY 排序数据。

```xml
<select id="pageUserData" resultType="com.shsajt.common.dto.UserDataPageDTO">
select
wap.user_id AS userId,
count(case when cw.work_type_id = 8 then cw.id end) AS checkCount,
count(case when cw.work_type_id = 9 then cw.id end) AS trainCount,
count(case when cw.work_type_id = 10 then cw.id end) AS guideCount,
count(case when cw.work_type_id = 11 then cw.id end) AS serveCount,
count(case when cw.work_type_id = 12 then cw.id end) AS meetCount,
count(case when cw.work_type_id = 13 then cw.id end) AS reportCount,
count(case when cw.work_type_id = 14 then cw.id end) AS otherCount
from
work_and_person wap
join
contract_work cw
on
wap.work_id = cw.id
<where>
cw.deleted = 0 and wap.deleted = 0
and cw.office_id = #{vo.officeId}
<if test="vo.beginCreate != null">
and cw.gmt_create <![CDATA[ >= ]]> #{vo.beginCreate}
</if>
<if test="vo.endCreate != null">
and cw.gmt_create <![CDATA[ <= ]]> #{vo.endCreate}
</if>
</where>
group by wap.user_id
order by cw.gmt_create desc
</select>
```

 

分组关键字 group by加上去之后,count(case when cw.work_type_id = 8 then cw.id end) AS checkCount 就是对分完组的每个小组的cw.work_type_id进行操作了而不是整个cw表的work_type_id。

![image-20230918155250073](https://img2023.cnblogs.com/blog/2724586/202309/2724586-20230918155931120-752881266.png)

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

如若内容造成侵权/违法违规/事实不符,请联系宁远站长网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

每日一题:AJAX进度监控(附可运行源码)

1、什么是AJAX AJAX(Asynchronous JavaScript and XML)是一种用于在网页上进行异步通信的技术。它允许在不刷新整个页面的情况下,通过在后台与服务器进行数据交换来更新部分网页内容。 传统的网页开发中,当用户与网页进行交互时,需要刷新整个页面才能获取最新的内容。而使…

记一次 .NET 某电力系统 内存暴涨分析

一:背景 1. 讲故事 前些天有位朋友找到我,说他生产上的程序有内存暴涨情况,让我帮忙看下怎么回事,最简单粗暴的方法就是让朋友在内存暴涨的时候抓一个dump下来,看一看大概就知道咋回事了。 二:Windbg 分析 1. 到底是谁吃了内存 这个问题说的再多也不为过,一定要看清楚这…

每天一个linux命令(42):kill命令

Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令。通常,终止一个前台进程可以使用Ctrl+C键,但是,对于一个后台进程就须用kill命令来终止,我们就需要先使用ps/pidof/pstree/top等工具获取进程PID,然后使用kill命令来杀掉该…

扩展的多曝光图像合成算法及其在单幅图像增强中的应用。

针对Exposure fusion算法存在的Out-of-range Artifact和low frequency halo两个瑕疵,分析了Extended Exposure Fusion的改进过程,并进一步借助有关方法实现了单幅图像的Simulated Exposure Fusion过程。在拉普拉斯金字塔在多图HDR算法中的应用以及多曝光图像的融合算法简介一…

[Microsoft Azure] 如何在 Azure App Service 上获取内存转储文件

在本文中,我们将探讨如何在 Azure App Service 上获取应用程序的内存转储文件。这对于诊断和解决应用程序性能问题非常有用。在处理 Azure App Service 上运行的应用程序性能问题时,获取内存转储文件可能非常有用。内存转储文件记录了应用程序在某个时刻的内存状态,可以帮助…

Windows 安装 chromedriver 和 Python 调试

下载 chromedriver 从官方网站上下载 chromedriver 的版本,这个版本需要和你 Chrome 的版本对应上。 下载的地址为:ChromeDriver - WebDriver for Chrome - Downloads这个地方,将会打开一个新的浏览器界面,Chrome for Testing availability 在这个新的浏览器界面中,我们能…