首页 > 数据库 >SQL系列2-分组数据

SQL系列2-分组数据

时间:2023-09-18 16:13:27浏览次数:42  
标签:系列 type work order 分组 SQL 2724586 cw id

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](/i/l/?n=23&i=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](/i/l/?n=23&i=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](/i/l/?n=23&i=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](/i/l/?n=23&i=blog/2724586/202309/2724586-20230918155931120-752881266.png)

标签:系列,type,work,order,分组,SQL,2724586,cw,id
From: https://www.cnblogs.com/zheng-s/p/17712214.html

相关文章

  • SQL系列3-连表查询
    SQL系列3-连表查询✅子查询嵌套子查询进行过滤:SELECTcust_name,cust_contact#顾客信息FROMCustomersWHEREcust_idIN(SELECTcust_id#订单所属顾客FROMOrdersWHEREorder_numIN(SELECTorder_num#包含物品RGAN01的订单FROMOrderItemsWHE......
  • sql系列5-组合查询
    sql系列5-组合查询✅利用UNION操作符将多条SELECT语句组合成一个结果集多数SQL查询只包含从一个或多个表中返回数据的单条SELECT语句。但是,SQL也允许执行多个查询(多条SELECT语句),并将结果作为一个查询结果集返回。这些组合查询通常称为并(union)或复合查询(compoundquer......
  • SQL系列4-插入更新与删除
    SQL系列4-插入更新与删除✅下面是许多SQL程序员使用UPDATE或DELETE时所遵循的重要原则。除非确实打算更新和删除每一行,否则绝对不要使用不带WHERE子句的UPDATE或DELETE语句。保证每个表都有主键(如果忘记这个内容,请参阅第12课),尽可能像WHERE子句那样使用它(......
  • 软件测试|MySQL CROSS JOIN:交叉连接的详细解析
    简介在MySQL数据库中,CROSSJOIN是一种用于生成两个或多个表的笛卡尔积的连接方法。CROSSJOIN不需要任何连接条件,它将左表的每一行与右表的每一行进行组合,从而生成一个包含所有可能组合的结果集。本文将详细介绍MySQL中的CROSSJOIN概念,并提供示例来加深理解。什么是CROSS......
  • 软件测试|MySQL INNER JOIN:内连接的详细解析
    简介在关系型数据库中,数据通常存储在多个表中,并且这些表之间可能存在关联关系。为了从多个表中检索相关数据,SQL提供了不同类型的连接操作,其中之一就是内连接(INNERJOIN)。本文将详细解析MySQL内连接的概念、语法和使用案例。什么是内连接(INNERJOIN)?内连接是一种用于从两个或多个表中......
  • SQL 将查询结果插入到另一张表中
    INSERTINTO如果两张表(导出表和目标表)的字段一致,并且希望插入全部数据,可以用这种方法:INSERTINTO目标表SELECT*FROM来源表WHERE条件;例如,要将test表插入到newTest表中,则可以通过如下SQL语句实现:INSERTINTOnewTestSELECT*FROMtest;如果只希望导入指定......
  • Ubuntu20.04安装Mysql8主从
    Ubuntu20.04安装Mysql8主从一.主数据库安装1.下载安装包并初始化数据库#进入目录cd/opt#下载安装包wgethttps://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz#解压tar-xvfmysql-8.0.20-linux-glibc2.12-x86_64.tar.xz......
  • SQLServer递归触发器在KES中的一次改造分析
    文章概要:某项目将数据从SQLSERVER迁移到KES。其中SQLSERVER中触发器用到了TRIGGER_NESTLEVEL()函数,KES并不能直接支持该函数。起初在分析该问题时想复杂了本文做了一次记录。实际上在kes兼容sqlsevrer基础语法,直接简单使用SYS_TRIGGER_DEPTH()替换TRIGGER_NESTLEVEL()函......
  • MySQL篇:第七章_详解mysql存储过程&函数
    存储过程含义:一组经过预先编译的sql语句的集合好处:1、提高了sql语句的重用性,减少了开发程序员的压力2、提高了效率3、减少了传输次数分类:1、无返回无参2、仅仅带in类型,无返回有参3、仅仅带out类型,有返回无参4、既带in又带out,有返回有参5、带inout,有返回有参注意:in、o......
  • DVWA靶场通关- SQL Injection(SQL注入)
    BruteForce(暴力(破解))、CommandInjection(命令行注入)、CSRF(跨站请求伪造)、     FileInclusion(文件包含)、FileUpload(文件上传)、InsecureCAPTCHA(不安全的验证码)、    SQLInjection(SQL注入)、SQLInjection(Blind)(SQL盲注)、XSS(DOM)(基于DOM树)、    XSS(Reflec......