首页
学习
活动
专区
圈层
工具
发布

MySQL 查询结果倒叙后分组(先order by,再按order by的结果group by)

方案1:按需要GROUP BY的关键字段简单查询出全部数据,然后在程序中再次过滤、倒叙、取首。...局限性:批量查询时,数据量不可控,范围越大,内存越可能扛不住,单次查询结果量可预估时酌情考虑,不确定的话不推荐。 方案2:子查询的ORDER BY配合LIMIT使用。...BY     temp.auth_user_id; 方案3:使用MAX函数针对倒叙条件“审核时间”取最大值,模拟倒叙。...局限性:需要对可能导致查询结果中GROUP BY字段数据非唯一的情况做考虑(本需求要求查询结果中销售数据唯一,影响唯一的字段是check_time(大)、create_time(小),若还有其他字段,则需要再次关联...MAX的结果),影响字段越多,则关联的子查询越多,降低性能。

4.7K50

ThinkPHP5.1 子查询-使用 Group 获取每组最新数据

背景 当前项目业务中, 需要以字段 account_id 分组,获取 "redbook_effect" 数据表中最新的数据记录集合 - 根据网上的经验描述,如果 group 和 order 一起使用...- 会先进行分组获取, - 再对得到的结果集进行排序 - 所以如此一来,得到的最终数据中,对应字段 "account_id" 的记录并非是最新的 ---- 解决方案:【使用子查询,先进行排序...,再分组】 参考文档 【ThinkPHP5 开发文档 —— 子查询】 【where,group by,having,order by 执行顺序和编写顺序】 处理源码如下: $where =...->order('id desc') ->where($where) ->buildSql(); //然后使用子查询构造新的查询...,子查询的结果是作为一个派生表给上一级进行查询,所以子查询的结果必须有一个别名 ②.

3.1K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    条件简化&子查询(1)--Mysql基于规则优化(四十四)

    Having和where语句合并,如果查询语句里没有sum,max等聚集函数及其group by,优化器会合并他们。 常量表检测: 查询表中只有一条或者没有数据。...外连接消除 我们回顾一下,内连接和外连接的区别,内连接用on查询出过滤条件如果无法满足是会直接舍弃的,而且驱动表和被驱动表是可以优化的,而外连接分为左连接和右连接,若on的条件不满足,则被驱动表的数据也会查询出来...按返回的结果集区分子查询 因为子查询本身也是查询,可以吧子查询返回的不同数据分为不同的子查询类型。...IN/NOT IN/ANY/SOME/ALL子查询 In和not in,这个布尔表达式的意思是用来判断某个操作数在不在由子查询结果集组成的集合中, SELECT * FROM t1 WHERE (m1,...FROM t1 WHERE EXISTS (SELECT 1 FROM t2); 对于子查询来说,我们并不关系子查询返回的结果集,我们关系的是子查询结果集是否存在记录,只要子查询有记录,那么整个表达式就是

    81820

    MySQL递归查询_函数语法检查_GROUP_CONCAT组合结果集的使用

    2-递归查询关键部分:   a-我的表结构:   b-我的递归脚本:   用于查询:当前类目ID及所有的父级元素的ID使用逗号分割开的一个字符串:   下面脚本里使用了组合结果集的一个函数:GROUP_CONCAT...SELECT ParentID INTO pid FROM product_leimu WHERE 1=2; -- 找不到数据的情况下, INTO 无法给pid赋值,pid结果不变, SELECT GROUP_CONCAT...pid>0 THEN        SET pathID = concat(pid, ',', pathID);     END IF; END WHILE; RETURN pathID; END;   查询结果展示...THEN     代码 ELSEIF     代码 END IF; WHILE 条件 DO     代码 END WHILE; c-特殊函数的使用:   函数:GROUP_CONCAT:将结果集链接在一起...INTO 给pid赋值,NULL   我们这里是想在查不到的结果的时候,通过WHILE的判断结束循环,如果不通过GROUP_CONCAT函数将结果传给pid,那么将会进入无线循环当中,是很坑的!!

    3.8K30

    子查询与子查询的分类(一)

    在 SQL 中,子查询是一个查询嵌套在另一个查询中的查询,也被称为内部查询。子查询可以用来创建更复杂的查询,从而实现更高级的数据检索和分析。...子查询的分类子查询可以根据其位置和返回结果的数量和数据类型分为以下三种类型:标量子查询:返回一个单一值的查询,通常用于作为 WHERE 子句或 SELECT 子句中的表达式。...first_name, last_name, salaryFROM employeesWHERE salary > (SELECT AVG(salary) FROM employees);在这个例子中,子查询...product_category_id IN (SELECT category_id FROM categories WHERE category_name = 'Electronics');在这个例子中,子查询...表子查询:返回一个表格作为查询结果的查询,通常用于 FROM 子句中的表达式。

    3.5K50

    子查询与子查询的分类(二)

    使用子查询子查询可以嵌套在 SELECT、FROM、WHERE 和 HAVING 子句中,以实现更复杂的数据检索和分析。...在使用子查询时,需要注意以下几点:子查询必须始终放在括号中;子查询可以是标量、列或表子查询;子查询可以使用运算符、聚合函数和其他 SQL 语句;子查询的结果必须与主查询的数据类型兼容。...以下是一些常见的子查询用法示例:在 WHERE 子句中使用子查询SELECT customer_name, credit_limitFROM customersWHERE customer_id IN...(SELECT customer_id FROM orders WHERE order_date BETWEEN '2022-01-01' AND '2022-12-31');在这个例子中,子查询 (SELECT...(SELECT AVG(product_price) FROM products) 返回产品表中的平均价格,然后将其与每个类别的平均价格进行比较,并将结果过滤为只包含平均价格高于产品表平均价格的类别。

    3.2K10

    MySQL:查询条件

    查询语句中你可以使用一个或者多个表,表之间使用逗号**,** 分割,并使用WHERE语句来设定查询条件。 你可以在 WHERE 子句中指定任何条件。...使用主键来作为 WHERE 子句的条件查询是非常快速的。 如果给定的条件在表中没有任何匹配的记录,那么查询不会返回任何数据。...[ASC [DESC][默认 ASC]] 你可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。 你可以设定多个字段来排序。...你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。 你可以添加 WHERE…LIKE 子句来设置条件。...---- 5、GROUP BY 语句根据一个或多个列对结果集进行分组。 在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。

    6.3K10

    六、条件查询

    一、WHERE 子句单条件查询 在SQL中 insert 、UPDATE、DELETE和SELECT后面都能带WHERE子句,用来插入修改删除或查询指定条件的记录。...单条件查询语法如下: SELECT column_name FROM table_name WHERE column_name 运算符 value; 运算符如下: 运算符 说明 = 等于 或 !...= 不等于 > 大于 < 小于 >= 大于等于 <= 小于等于 between and 选取介于两个值之间的数据范围,相当于 >=并且<= 例子: 查询年龄大于30岁的学生: SELECT name,...40; 二、WHERE 子句多条件查询 在WHERE子句中使用and、or可以把两个或多个过滤条件结合起来,多条件查询语法如下: SELECT column_name FROM table_name WHERE...condition1 运算符 condition2; 运算符如下: 运算符 说明 and 表示左右两边的条件同时成立 or 表示左右两边只要有一个条件成立即可 例子: 查询年龄大于30的男学生: SELECT

    2K30

    六、条件查询

    一、WHERE 子句单条件查询 在SQL中 insert 、UPDATE、DELETE和SELECT后面都能带WHERE子句,用来插入修改删除或查询指定条件的记录。...单条件查询语法如下: SELECT column_name FROM table_name WHERE column_name 运算符 value; 运算符如下: 运算符 说明 = 等于 或 !...= 不等于 大于 < 小于 = 大于等于 <= 小于等于 between and 选取介于两个值之间的数据范围,相当于 >=并且<= 例子: 查询年龄大于30岁的学生: SELECT name,age...40; 二、WHERE 子句多条件查询 在WHERE子句中使用and、or可以把两个或多个过滤条件结合起来,多条件查询语法如下: SELECT column_name FROM table_name WHERE...condition1 运算符 condition2; 运算符如下: 运算符 说明 and 表示左右两边的条件同时成立 or 表示左右两边只要有一个条件成立即可 例子: 查询年龄大于30的男学生: SELECT

    1.9K00

    0777-5.16.2-Hive中使用Date函数用于条件查询结果异常分析

    作者:辉少 异常描述 测试环境 1.RedHat7.2 2.CM和CDH版本为5.16.2 在CDH5.16.2 中使用Hive时 ,当Hive 的查询where条件中使用Date函数后,函数中的列的值会在返回结果中被改变...,导致结果不正确。...具体表现为使用Date 函数当查询条件后导致string 格式的日期丢失了时间部分,只有日期。...异常分析 关于以上问题,与Hive的一个已知BUG HIVE-22513[1]有关,主要是由于Hive对列条件过滤操作中的持续传播从而导致错误的结果。...异常解决和总结 对于Date函数持续传播从而导致错误的结果基于上述分析,提供以下2种解决办法 1.单个查询中临时关闭CBO,在Hive 1.1.0 可以通过set hive.optimize.constant.propagation

    1.3K30

    PostgreSQL 子查询

    子查询或称为内部查询、嵌套查询,指的是在 PostgreSQL 查询中的 WHERE 子句中嵌入查询语句。 一个 SELECT 语句的查询结果能够作为另一个语句的输入值。...以下是子查询必须遵循的几个规则: 子查询必须用括号括起来。 子查询在 SELECT 子句中只能有一个列,除非在主查询中有多列,与子查询的所选列进行比较。...ORDER BY 不能用在子查询中,虽然主查询可以使用 ORDER BY。可以在子查询中使用 GROUP BY,功能与 ORDER BY 相同。...子查询返回多于一行,只能与多值运算符一起使用,如 IN 运算符。 BETWEEN 运算符不能与子查询一起使用,但是,BETWEEN 可在子查询内使用。...SELECT 语句中的子查询使用 子查询通常与 SELECT 语句一起使用。

    3.7K30

    Hive 子查询

    必须为子查询指定名称,因为FROM子句中的每个表都必须具有名称。子查询 SELECT 列表中的列必须具有独一无二的名称。子查询 SELECT 列表中的列可以在外部查询中使用,就像使用表中的列一样。...子查询也可以是带 UNION 的查询表达式。Hive支持任意级别的子查询。 在Hive 0.13.0及更高版本(HIVE-6519)中可选关键字 AS 可以包含的子查询名称之前。...WHERE中的子查询 从Hive 0.13开始,WHERE子句中支持某些类型的子查询。...可以将这些子查询的结果视为 IN 和 NOT IN 语句中的常量(我们也称这些子查询为不相关子查询,因为子查询不引用父查询中的列)。...IN/NOT IN 子查询只能选择一列。 EXISTS/NOT EXISTS 必须有一个或多个相关谓词。 对父查询的引用仅在子查询的WHERE子句中支持。

    8.1K41

    MySQL子查询

    当获得一个查询的答案需要多个步骤的操作,首先必须创建一个查询来确定用户不知道但包含在数据库中的值,将一个查询块嵌套在另一个查询块的WHERE字句或HAVING短语的条件中查询块称为子查询或内层查询。...上层的查询块曾为父查询或外层查询。子查询的结果作为输入传递回“父查询”或“外部查询”。父查询将这个值结合到计算中,以便确定最后的输出。...一、子查询概述 1.1、什么是子查询 子查询是一种常用计算机语言sql中select语言中嵌套查询下层的程序模块。当一个查询是另一个查询的条件时,称之为子查询。...一个查询的结果做为另一个查询的条件 有查询的嵌套,内部的查询称为子查询 子查询要使用括号 1.3、子查询结果的三种情况 单行单列 多行单列 多行多列 二、单行单列查询 子查询结果只要是单行单列,...子查询结果只要是单行多列,结果集类似于一个数组,父查询使用in、not in运算符 格式: select */字段列表 from 数据库表名 where 字段名 in (子查询); 案例: 查询工资大于

    7.3K11

    MySQL 子查询 嵌套查询

    MySQL 子查询 嵌套查询 一、带IN关键字的子查询 二、带EXISTS关键字的查询 三、带ANY、SOME 关键字的子查询 四、带ALL 关键字的查询 自言自语 一、带IN关键字的子查询 使用IN...关键字进行子查询的时候,内层查询语句仅仅返回一个数据列。...语法格式: SELECT 查询字段 FROM 表名 WHERE [NOT] EXISTS (SELECT 语句); 三、带ANY、SOME 关键字的子查询 ANY 、SOME 是表示满足其中任一条件,就允许创建一个表达式对子查询的返回值列表进行比较...只要满足内层子查询中的任何一个比较条件,就返回一个结果作为外层查询的条件。 (满足任意一个) 语法格式: SELECT 查询字段 FROM 表名 WHERE 字段名 比较运算符(>,<..)...ANY|SOME (SELECT 语句); 四、带ALL 关键字的查询 使用ALL 必须满足所有内层查询条件。

    17.5K40

    MySQL 子查询

    标量子查询(Scalar Subquery):返回单个值(一行一列)的子查询。 行子查询(Row Subquery):返回单行结果(一行多列)的子查询。...3.1 标量子查询 标量子查询的结果就像一个常量一样,可以用于 SELECT、WHERE、GROUP BY、HAVING 以及 ORDER BY 等子句中。...当 WHERE 条件中的子查询返回多行数据时,不能再使用普通的比较运算符,因为它们不支持单个值和多个值的比较;如果想要判断某个字段是否在子查询返回的数据列表中,可以将子查询与 IN、ALL、ANY/SOME...,因为子查询返回结果为空集,外查询相当于没有 WHERE 条件。...3.4 表子查询 当子查询返回的结果包含多行多列数据时,称为表子查询。表子查询通常用于 FROM 子句或者查询条件中。

    3.8K10

    【mysql】子查询

    子查询的结果被主查询(外查询)使用 。...注意事项 子查询要包含在括号内 将子查询放在比较条件的右侧 单行操作符对应单行子查询,多行操作符对应多行子查询 1.3 子查询的分类 分类方式1: 按内查询的结果返回一条还是多条记录,将子查询分为单行子查询...子查询从数据表中查询了数据结果,如果这个数据结果只执行一次,然后这个数据结果作为主查询的条件进行执行,那么这样的子查询叫做不相关子查询。...如果在子查询中不存在满足条件的行: 条件返回 FALSE 继续在子查询中查找 如果在子查询中存在满足条件的行: 不在子查询中继续查找 条件返回 TRUE NOT EXISTS关键字表示如果不存在某种条件...可以这样理解:子查询实际上是通过未知表进行查询后的条件判断,而自连接是通过已知的自身数据表进行条件判断,因此在大部分 DBMS 中都对自连接处理进行了优化。

    5K30

    子查询(2)

    相关子查询 相关子查询执行流程 如果子查询的执行依赖于外部查询,通常情况下都是因为子查询中的表用到了外部的表,并进行了条件关联,因此每执行一次外部查询,子查询都要重新计算一次,这样的子查询就称之为 关联子查询...salary,e1.department_id FROM employees e1,(SELECT department_id,AVG(salary) dept_avg_sal FROM employees GROUP...`department_id` ); EXISTS 与 NOT EXISTS关键字 关联子查询通常也会和 EXISTS操作符一起来使用,用来检查在子查询中是否存在满足条件的行。...如果在子查询中不存在满足条件的行:         条件返回 FALSE         继续在子查询中查找         如果在子查询中存在满足条件的行:         不在子查询中继续查找...FROM employees e1 WHERE EXISTS ( SELECT * FROM employees e2 WHERE e2.manager_id = e1.employee_id); 子查询实际上是通过未知表进行查询后的条件判断

    1.6K20
    领券