Mysql Group By、limit、where

本文探讨了MySQL查询中的执行顺序,如从`where`到`groupby`再到`having`和`orderby`,并举例说明如何按name分组获取最新操作记录和计算指定字段的最大值。此外,还介绍了如何在分组后统计其他字段并去重。

1.Mysql执行顺序

写的顺序:selectfromwhere. group byhavingorder by..
执行顺序:fromwheregroup byhaving. selectorder by
按name分组查最新一条操作记录
select * from (select * from a order by time desc) as b group by b.name
指定字段获取最大值 
SELECT id, max(operat_time) FROM tb GROUP BY id;

# 推荐使用
select cluesTaracking_id,cluesId,
MAX(trackingTime),
fail_why from cluestracking
group by cluesId
order by trackingTime desc

参考连接

分组后统计其他字段(也需去重)

select
	date_format(create_time, '%Y-%m-%d') date_,
	count(distinct user_id) counts
from
	a
where
	del_ = 1
group by
		date_
order by
	date_ desc
### MySQLGROUP BYLIMIT 子句的执行顺序 在构建复杂的查询时,理解各个子句的处理顺序至关重要。对于 MySQL 查询而言,其标准解析流程如下: - **FROM**: 首先指定数据源表。 - **WHERE**: 接着应用条件过滤记录集。 - **GROUP BY**: 将满足 WHERE 条件的数据分组[^4]。 - **HAVING**: 进一步筛选由 GROUP BY 创建的这些分组。 - **SELECT**: 然后决定最终返回哪些列。 - **ORDER BY**: 对结果集进行排序操作。 - **LIMIT**: 最终限制输出的结果数量。 当涉及到 `GROUP BY` 和 `LIMIT` 组合使用的情况时,在完成了所有的聚合计算之后才会考虑 `LIMIT` 的作用范围。这意味着只有经过了完整的分组统计并可能进行了初步排序后的结果集合才被截取特定数目行数作为最后呈现给用户的输出[^3]。 为了更好地说明这一点,下面给出一个具体的例子来展示如何组合这两个关键字实现预期功能: 假设有一个名为 orders 的订单表格,其中包含 customer_id (客户ID), order_date(下单日期),amount(金额)三个字段。现在想要获取每个客户的最近三条购买记录及其总消费额,则可以编写如下SQL语句: ```sql SELECT o.customer_id, SUM(o.amount) as total_spent, GROUP_CONCAT( CONCAT_WS(':', DATE_FORMAT(order_date,'%Y-%m-%d'), amount) ORDER BY order_date DESC SEPARATOR ';' ) recent_orders FROM ( SELECT * FROM orders WHERE 1=1 /* 可能存在的其他条件 */ ORDER BY order_date DESC LIMIT 3 OFFSET 0 ) o GROUP BY o.customer_id; ``` 此查询首先通过内层子查询选取每位顾客最新的三笔交易;外层再基于这个缩小过后的结果集做进一步汇总分析——即求和以及拼接字符串形式表示这三次购物详情[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值