mysql 5.7 以上-- 子查询后group by 数据异常问题

最近写sql遇到子查询后group by 数据异常问题
明明对数据进行了排序后分组,发现group by 后的是升序
很无语!!!!
经过多方查证

其实是因为mysql 5.7版本对这个查询进行优化了,认为子查询中的order by可以进行忽略,只要Derived table里不包含如下条件就可以进行优化:

1. UNION clause
2.  GROUP BY
3. DISTINCT
4.Aggregation
5. LIMIT or OFFSET

也就是子查询中带有以上就不会去走Derived table优化。

子查询order by后面加上 limit 是可以成功返回正确数据的

limit 的值根据实际情况来自己选择。

select 
c.base_id AS base_id,
any_value(id) as id ,
any_value(NAME) as `NAME`,
any_value(ROUTE) as ROUTE,
c.LAST_UPDATED_BY as LAST_UPDATED_BY,
any_value(LAST_UPDATE_DATE) as LAST_UPDATE_DATE
from (
select 
    wk.base_id,
		wk.id,
		wk. NAME,
		wk.ROUTE,
		kp.LAST_UPDATED_BY,
		kp.LAST_UPDATE_DATE
  FROM
   kb_workspace wk,
   kb_workspace_page wkp,
   kb_page kp
  WHERE
   wkp.WORKSPACE_ID = wk.ID
  AND wkp.PAGE_ID = kp.ID
  AND wk.base_id IN (2,5,6,6)
	ORDER BY wk.base_id, kp.LAST_UPDATED_BY,kp.LAST_UPDATE_DATE DESC
	limit 500
)c GROUP BY c.base_id,c.LAST_UPDATED_BY
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值