mysql分组排序后取出几条记录,

取出该表中条数为floor(总数*0.8)的数据,比如cc字段中值为qqqq的应取出floor(总数*0.8)即4条,cc字段中值为ssss的是5条,dddd字段的是6条... 取出该表中条数为 floor(总数*0.8)的数据,比如cc字段中值为qqqq的应取出floor(总数*0.8) 即4条,cc字段中值为ssss的是5条,dddd字段的是6条
即查询出每组前floor(总数*0.8)条记录
展开
 我来答
gwbnet
推荐于2018-04-13 · TA获得超过894个赞
知道小有建树答主
回答量:350
采纳率:100%
帮助的人:226万
展开全部
# mysql不支持其它复杂数据库的类似 rank() over 的排名和统计查询
# 只能通过变通的子查询和逻辑计算方式来实现,对于中小数据量可以考虑

-- rank 排名实现
select inline_rownum, aa, cc, amt, orderid FROM
(
select
# logic_cal 只是实现计数器计算的,每次逐条查询时会对比当前 cc 与 @last_cc 是否相同,如果不同则把当前该列值赋于 @last_cc 并重设计数器 @num := 1,否则计数器自加 @num := @num + 1
(case when cc <> @last_cc then concat(@last_cc := cc, @num := 1 ) else concat(@last_cc, @num := @num + 1) end ) logic_cal
, @num as inline_rownum
, aa, cc, amt, orderid
from tb_rank,
( select @last_cc := '') t, # 初始化 @last_cc 为 '', 如要检查的列(基于计数器统计的列)是int型,则初始化为0; varchar型初始化为''
( select @num := 0 ) t2 # 初始化@num为0
order by cc, orderid asc # 排序的方式会影响@num的生成,因为logic_cal是逐行计算的
) t
where inline_rownum <= floor(amt*0.8) #限制条数,取常量值或其他
order by cc,orderid asc
;
无厘头吧
2014-07-04 · TA获得超过571个赞
知道小有建树答主
回答量:531
采纳率:62%
帮助的人:156万
展开全部

每一组 你要显示几条数据?

用group by cc

看看是你想要的吗?

select reason,floor(总数*0.8) from 表明 group by cc order by cc ;
追问
你看我的截图
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-07-04
展开全部
select 字段1,字段2,。。。。。。 from 表 order by 字段 limit n
追问
谢谢你的回答 ,但是这个实现不了我的要求
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式